чего не хватает в отношениях OneToMany моих сущностей JPA? - PullRequest
0 голосов
/ 01 марта 2012

Я использую IBM RAD 7.5 и WebSphere 7.

У меня есть две сущности с отношением OneToMany (скажем, Customer и Order).Когда я создаю Заказчика с Заказом, обе сущности сохраняются правильно.У меня есть fetch = FetchType.EAGER, но когда я читаю сущность Customer, она не содержит ни одного из заказов.

Что я делаю неправильно?Вот код ...

@Entity
@Table(name="CC_CUSTOMER")
public class Customer implements Serializable {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private BigDecimal id;
  @OneToMany(cascade=CascadeType.ALL,mappedBy="customer",fetch=FetchType.EAGER)
  private List<Order> orderList;
  public List<Order> getOrderList() { return this.orderList; }
  public void setOrderList(List<Order> orderList) { this.orderList = orderList; }
  /*...*/
}

... и ...

@Entity
@Table(name="CC_ORDER")
public class Order implements Serializable {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private long id;
  @ManyToOne
  @JoinColumn(name="customerid",nullable=false)
  private Customer customer;
  public Customer getCustomer() { return this.customer; }
  public void setCustomer(Customer customer) { this.customer = customer; }
  /*...*/
}

Что я делаю не так?
Кроме того, вот как выглядит мой DAO ...

@Stateless
public class CustomerDAO {
  public List<Customer> getAll() {
    List<Customer> customers = new ArrayList<Customer>();
    EntityManager em = getEntityManager();
    try {
      Query query = em.createQuery("select c from Customer c");
      customers.addAll(query.getResultLists());
    } finally {
      em.close();
    }
  }
  return customers;
}

Любые советы или предложения очень ценятся, спасибо!Rob

1 Ответ

1 голос
/ 01 марта 2012

Все ваши определения классов выглядят хорошо для меня.Может показаться, что базовая реализация JPA не вытягивает связанные объекты через ваш запрос.Вы можете использовать их явно следующим образом:

Query query = em.createQuery("select distinct c from Customer c left join fetch c.orderList");
customers.addAll(query.getResultLists());

, который присоединится к клиенту по всем его заказам и вернет правильно заполненные объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...