JPA, EJB, ManagedBeans, JSF 등을 배우려고했지만 엔티티를 지속하려고 시도하는 중 오류가 발생했습니다. 그것은 내 facelet을 통해 BlogManager save 메소드를 호출합니다. 다음은 JSF, ManagedBean, EJB 및 Entity입니다.엔티티를 지속 할 수 없습니다. EJBException
@Entity
@Table(name = "BLOG")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Blog.findAll", query = "SELECT b FROM Blog b"),
@NamedQuery(name = "Blog.findByBlogid", query = "SELECT b FROM Blog b WHERE b.blogid = :blogid"),
@NamedQuery(name = "Blog.findByText", query = "SELECT b FROM Blog b WHERE b.text = :text"),
@NamedQuery(name = "Blog.findByTimestamp", query = "SELECT b FROM Blog b WHERE b.timestamp = :timestamp")})
public class Blog implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "BLOGID")
private Integer blogid;
@Size(max = 5000)
@Column(name = "TEXT")
private String text;
@Column(name = "TIMESTAMP")
@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;
public Blog() {
}
public Blog(Integer blogid) {
this.blogid = blogid;
}
Getters and Setters...
EJB :
@Stateless
public class BlogFacade extends AbstractFacade<Blog> {
@PersistenceContext(unitName = "MyBlogPU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public BlogFacade() {
super(Blog.class);
}
public List<Blog> getBlogs(){
em.createNativeQuery("USE Blog").executeUpdate();
Query query = em.createNamedQuery("Blog.findAll");
return query.getResultList();
}
public void deleteBlog(int id){
Query query = em.createNativeQuery("DELETE FROM blog WHERE blogid = :blogid");
query.setParameter(":blogid", id);
query.executeUpdate();
}
}
ManagedBean은
@Named("blogManager")
@ManagedBean
@SessionScoped
public class BlogManager implements Serializable {
private Blog BlogEntity;
@EJB
private BlogFacade BlogFacade;
@PostConstruct
public void init(){
BlogEntity = new Blog();
}
public Blog getBlogEntity(){
return this.BlogEntity;
}
public void setBlogEntity(Blog BlogEntity){
this.BlogEntity = BlogEntity;
}
public void save(){
BlogFacade.create(BlogEntity);
}
public void delete(){
BlogFacade.remove(BlogEntity);
}
public void deleteBlog(@QueryParam("blogid") int id){
BlogFacade.deleteBlog(id);
}
public List<Blog> getBlogs(){
return BlogFacade.getBlogs();
}
}
Facelet
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://xmlns.jcp.org/jsf/passthrough"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns="http://www.w3.org/1999/xhtml"
template="./template.xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<ui:define name="left">
<h:form>
<h:inputTextarea value="#{blogManager.blogEntity.text}" p:placeholder="Tweet max 30 chars." style="width: 100%; height:150px; resize: none;" /><br/><br/>
<h:commandButton value="Tweet" action="#{blogManager.save}" />
</h:form>
</ui:define>
<ui:define name="right">
<c:forEach items="#{blogManager.getBlogs()}" var="item">
<h:outputText value="#{item.getText()}" />
Likes: <h:outputText value="" />
<h:commandLink action="" value="like">
<f:param name="tweetid" value="" />
<f:param name="username" value="" />
</h:commandLink> <br />
<textarea>
<h:outputText value="" />
</textarea>
</c:forEach>
</ui:define>
</ui:composition>
확실하지 않음이 허용됩니다하지만 대신 http://pastebin.com/7Mp0J7yG에 STRACK 추적을 업로드 한 경우 어수선하다 이 게시물 온통. 그래서 나는 EJB 오류를 getting.
여기에 스택 추적을 게시합니다. 그러나 자바에서 예외를 얻는 표준 절차 : 자바에서 게시하십시오 (클래스 이름과 같은 모든 것을 사용자가 가져와야합니다.). 너 그거 해봤 니? – Gimby