2014-05-19 2 views
0

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()}" />&nbsp;&nbsp; 
     Likes: &nbsp;&nbsp;<h:outputText value="" />&nbsp;&nbsp;&nbsp; 
     <h:commandLink action="" value="like"> 
      <f:param name="tweetid" value="" /> 
      <f:param name="username" value="" /> 
     </h:commandLink>&nbsp;<br /> 
     <textarea> 
      <h:outputText value="" /> 
     </textarea> 
    </c:forEach> 
</ui:define> 

</ui:composition> 

확실하지 않음이 허용됩니다하지만 대신 http://pastebin.com/7Mp0J7yG에 STRACK 추적을 업로드 한 경우 어수선하다 이 게시물 온통. 그래서 나는 EJB 오류를 getting.

+0

여기에 스택 추적을 게시합니다. 그러나 자바에서 예외를 얻는 표준 절차 : 자바에서 게시하십시오 (클래스 이름과 같은 모든 것을 사용자가 가져와야합니다.). 너 그거 해봤 니? – Gimby

답변

1

귀하의 응용 프로그램은 콩 유효성 검사에 실패합니다. 그래서 그것을보십시오. 당신은 id 필드에 @NotNull 어노테이션을 가지고 있습니다. (어쨌든 기본 키는 null이 아니어야합니다.)하지만 제공된 소스에서 ID 생성 방법을 알 수는 없습니다. 전략이 정의되지 않았습니다. 추가 @GeneratedValue

관련 문제