2012-03-01 4 views
0

저는 IBM RAD 7.5 및 WebSphere 7을 사용하고 있습니다.JPA 엔티티의 OneToMany 관계에없는 것이 있습니까?

OneToMany 관계 (예 : 고객 및 주문)가있는 두 개의 엔티티가 있습니다. 주문한 고객을 만들면 두 엔티티가 올바르게 유지됩니다. 나는 Fetch = FetchType.EAGER를 가져 왔지만 Customer 엔티티를 읽을 때 Orders를 포함하지 않습니다.

내가 뭘 잘못하고 있니? 여기에 내가 잘못 뭐하는 거지 ...

@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(). add (o); customerDAO.createCustomer (c); ' –

답변

1

귀하의 클래스 정의는 모두 저에게 잘 보입니다. 기본 JPA 구현이 쿼리를 통해 관련 객체를 가져 오지 않는 것으로 보입니다. 당신은 다음과 같이 명시 적으로 뽑을 수 : 모든 주문에 고객을 가입하고 제대로 채워 개체를 반환합니다

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

.

+0

고마워요 @Perception, 그 일했다. 다른 사람들이 읽을 때, 나는 왜 그 쿼리에 "조인"부분을 포함시켜야하는지 확신 할 수 없다. fetch = FetchType.EAGER가 같은 결과를 가져 왔음에 틀림 없습니다. 다른 아이디어를 가져 주셔서 감사합니다! –