JPA и EJB - проблема OneToMany - PullRequest
       19

JPA и EJB - проблема OneToMany

0 голосов
/ 06 декабря 2009

Я пытаюсь создать простое приложение Java EE, которое использует JPA + EJB3 и Stripes. Это маленькая адресная книга. Я использую 2 JPA лица, Персона и Электронная почта. Каждый человек может иметь больше электронных писем, но каждое электронное письмо может принадлежать только одному человеку. Мои сущности выглядят так (с установщиками и получателями по умолчанию):

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 Ответ

1 голос
/ 06 декабря 2009

Есть ли в вашем классе Person метод getEmail() или getEmails()? Учитывая имя переменной emails Я бы ожидал Person.getEmails() с учетом имени атрибута, но ваш JSTL ищет getEmail().

Если это не проблема, я думаю, вам может понадобиться добавить аннотацию @JoinColumn к вашему классу Email и добавить в таблицу электронной почты столбец, который ссылается на идентификатор человека. Вот как я сделал все мои аннотации ManyToOne. Пример ManyToOne можно найти здесь .

...