2010-12-03 6 views
0

내가 가진 개체은 더 지연로드 요소와

@Entity public class A implements Serializable { 
    @OneToMany(mappedBy = "a", fetch = FetchType.LAZY) 
    private List<B> bList; 
} 

@Entity public class B implements Serializable{ 
    @JoinColumn(name = "A_ID", referencedColumnName = "ID") 
    @ManyToOne(optional = false, fetch = FetchType.LAZY) 
    private A a; 

    @JoinColumn(name = "C_ID", referencedColumnName = "ID", nullable = false) 
    @OneToOne(cascade = CascadeType.ALL, optional = false, fetch = FetchType.EAGER) 
    private C c; 
} 

@Entity public class C implements Serializable { 
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "c", fetch = FetchType.EAGER) 
    private B b; 
} 

내가 원격 클라이언트에서 EJB 방법으로 B 개체를 전달하는 경우, 다음 엔티티 애플리케이션 서버에 전달이 NULL을 엔티티를 유지하지 수있다; LAZY 로딩을 EAGER로 변경하면 모든 것이 잘 진행됩니다. EAGER로드를 사용하고 싶지 않지만 EAGER로드를 피하는 방법은 무엇입니까?

답변

0

원격 클라이언트에서받은 B 유형의 인스턴스를 유지할 수있는 유일한 방법은 이전 사본의 하위 상태를 복원 한 다음 유지하는 것입니다.

public B updateFromRemote(B b) { 
    B oldCopy = bDao.findBById(b.getId()); 
    b.setA(oldCopy.getA()); 
    b.setC(oldCopy.getC()); 
    return bDao.save(b); 
} 
+0

원격 클라이언트에서 B의 새 인스턴스를 전달합니다. B newb = new B(); newb.set (새 C (...)); newb.set (oldA); newB를 서버에 전달한 후 – dimitri

+0

B의 인스턴스를 원격으로 초기화 한 다음 서버에 전달하면 b.getC()가 null과 같은지 확인하십시오. – Seego

+0

예. 클라이언트 측 B를 초기화하고 서버 측에 전달한 후 서버에 전달 된 B 인스턴스는 NULL입니다. JPA 프로 바이더는 eclipselink 및 app server gf 3입니다. – dimitri