2009-12-06 54 views
0

我尝试构建使用JPA + EJB3和Stripes的简单Java EE应用程序。 这是一个小地址簿。我使用2个JPA实体,Person和Email。每个人可以有更多的电子邮件,但每个电子邮件只能属于一个人。我的实体看起来像这样(使用默认getter和setter方法):JPA和EJB - OneToMany问题

Person.java:

@Entity 
public class Person implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    @OneToMany(cascade = CascadeType.REMOVE, mappedBy = "person") 
    private Collection<Email> emails; ... } 

Email.java:

@Entity 
public class Email implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String note; 
    private String address; 
    @ManyToOne 
    private Person person; ... } 

但是,当我试图展示每个人的名单和他们的所有电子邮件,我无法收到电子邮件显示。这是我想如何打印它们:

<c:forEach items="${actionBean.people}" var="person"> 
    <tr> 
    <td><c:out value="${person.name}"/></td> 
    <td> 
     <c:forEach items="${person.email}" var="email"> 
      <c:out value="${email.address}"/><c:out value="${email.note}"/> 
     </c:forEach> 
    </td> 
    </tr> 
</c:forEach> 

任何想法,如何解决这个问题?

回答

1

您的Person类有getEmail()方法或getEmails()方法吗?鉴于emails的变量名称,我期望给定属性名称的Person.getEmails(),但您的JSTL正在寻找getEmail()

如果这不是问题,我相信您可能需要为Email类添加一个@JoinColumn注释,并在电子邮件表中添加一个引用人员ID的列。这就是我完成所有ManyToOne注释的过程。 ManyToOne的例子可以在here找到。

+0

谢谢@JoinColumn解决了它。 – marioErr 2009-12-06 05:07:41