2012-06-01 2 views
0

관계에서 엔티티를 관리하는 것에 대해 혼란스러워지고 있습니다. 책 PRO JPA2에 따르면 관계를 수동으로 구성하고 관계의 양 끝에 할당해야합니다.JPA2의 관계 관리에 관해

이제이 관계를 고려해보십시오.

@Entity 
public class Employee { 
    .. 
    @ManyToOne(cascade=CascadeType.PERSIST) 
    private Department department; 
    .. 
} 
@Entity 
public class Department { 
    .. 
    @OneToMany(mappedBy="department") 
    private Set<Employee> employees = new HashSet<Employee>(); 

    public void addEmployee(Employee e){ 
     getEmployees().add(e); 
     e.setDepartment(this); 
    } 
} 

이 코드 줄을 확인하는 간단한 테스트 사례를 만들었습니다.

Department dept1 = new Department(); 
dept1.setName("MARKETING"); 

Employee e1 = new Employee(); 
e1.setName("JOHN DOE"); 

e1.setDepartment(dept1); //[1] 
//dept1.addEmployee(e1); //[2] 

라인 [1] 고려 : 내가이 제대로 올바른 부서 ID와 Employee 테이블을 업데이트 할 것이라고 생각하지만 난 더비 확인하고 제대로 업데이트를 실행할 수 입니다

라인 [2] 고려 : 이것은 책에 따라 적절한 방법입니다.

아무도 내 의심을 분명히 할 수 있습니까?

는 EclipseLink/더비/JPA2

답변

1

당신이 부서 DEPT1를 얻을 호출 할 경우 라인 [1], 직원 'E1'이 FK 확인과 데이터베이스에 저장 될 것처럼 그것을 할,하지만 ... 경우 getEmployees(); 직원 'e1'은이 목록에 포함되지 않습니다. 새로운 쿼리를 만들어 데이터베이스에서 해당 쿼리를 다시 가져 오는 경우에도 마찬가지입니다. Employee 'e1'을 가지지 않습니다 (최소한 응용 프로그램을 재배포 할 때까지는 그렇지 않습니다). 그런 이유로 당신은 항상 그것을해야한다 [2].
JPA2 작업을 시작할 때 나는 이것을 모르고있었습니다. [1]에서와 같이 지속되는 엔티티였습니다. 나는 최근에 JPA에 의해 읽혀지지 않은 엔티티가 왜 DB에 저장되었는지를 확인하려고 거의 미쳤다.

+0

아 .. 그래서 그 이유가 .. Damian에게 감사드립니다. –

+0

@ MarkEstrada 문제 없음! – Damian