2012-03-01 2 views
0

Я использую IBM RAD 7.5 и WebSphere 7.Отсутствие у меня отношений OneToMany от JPA?

У меня есть два объекта с отношениями OneToMany (скажем, Клиент и Заказ). Когда я создаю клиента с ордером, оба объекта будут сохраняться правильно. У меня есть 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

+0

Как вы сохраняете свои сущности? ... сохраняя заказ или сохраняя Клиента? –

+0

Я предполагаю, что вы сделали тип, когда отправляли свой код в методе 'getOrderList'? – Perception

+0

Я сохраняю Заказчика. В частности: «Клиент c = новый Клиент(); Заказ o = новый заказ(); . C.getOrderList() добавить (о); customerDAO.createCustomer (с);» –

ответ

1

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

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

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

+0

Спасибо @Perception, что сработало. Для других читающих, я все еще не уверен, почему мне пришлось включить часть «join» в этот запрос. Кажется, что fetch = FetchType.EAGER должен был сделать то же самое. Спасибо за любые другие идеи! –

Смежные вопросы