JPA和EJB - OneToMany问题

时间:2009-12-06 03:33:42

标签: jpa ejb-3.0

我尝试构建使用JPA + EJB3和Stripes的简单Java EE应用程序。 这是一本小通讯录。我正在使用2个JPA实体,Person和Email。每个人都可以收到更多电子邮件,但每封电子邮件只能属于一个人。我的实体看起来像这样(使用默认的setter和getter):

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 个答案:

答案 0 :(得分:1)

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

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