2013-03-22 2 views
0

EclipseLink를 사용하여 데이터베이스 (Oracle 11g)를 JPA 엔티티에 매핑합니다. 나는 JPA 객체에 거의 모든 테이블을 매핑했지만 난 그냥 문제를 발견했습니다 :이 가지고있는 \ CurveDetail \ 엔티티에서컬렉션이 OneToMany 관계로 채워지지 않습니다. - EclipseLink

@Id 
@Column(name = "COD_CURVE") 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq.gen") 
@SequenceGenerator(name = "seq.gen.curve", sequenceName = "SEQCURVE", allocationSize = 1) 
private long codCurve; 

@Id 
@Column(name = "FEC_HISTORIC") 
@Temporal(javax.persistence.TemporalType.DATE) 
private Date fecHistoric; 

@OneToMany(mappedBy="codCurve", cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
private Collection<CurveDetail> detailsCollection; 

:의 \ 곡선 \ 엔티티에서

을 나는 다음과 같은 필드가 :

@ManyToOne 
@JoinColumns({ 
    @JoinColumn(name = "COD_CURVE", referencedColumnName = "COD_CURVE"), 
    @JoinColumn(name = "FEC_HISTORIC", referencedColumnName = "FEC_HISTORIC") 
}) 
private Curve codCurve; 

문제는 내가 \ 곡선 \ 개체를 쿼리 할 때 항상 세부 사항은 두 테이블에서 유효한 데이터가 있다는 사실에도 불구하고, null이 있다는 것입니다. 데이터베이스 확인 \ CurveDetail \ 테이블에 외래 키 제약 조건이 없다는 것을 알았으므로이 제약 조건이 데이터베이스를 올바르게 매핑해야합니까? 나는 (DBA에게 요청해야하고, 일주일은 걸릴 것입니다) 허용되지 않았기 때문에 FK 제약 조건을 직접 추가하려하지 않았습니다.

미리 감사드립니다.

+0

관계를 설정할 때 양면을 설정하고 있습니까? manyToOne은 관계를 제어하므로 변경 사항이 db에 유지되도록 최소로 설정해야하지만 둘 다 앱에서 유지 관리해야합니다. – Chris

+0

@Chris 양면을 설정하면 무엇을 의미합니까? 나는 방금 쿼리를 실행 중이며 데이터를 업데이트하거나 삽입하지 않습니다. Curve에서 \ SELECT o를 선택하면 \ CurveDetail \ collection이 비어있는 모든 커브가 반환됩니다.이 경우 문제가 발생합니다. – CocheLee

+1

새로 고침을 시도하면 캐시가 손상되는 문제가 발생합니까? EclipseLink는 빈 컬렉션을 만듭니다. 데이터베이스에서 구축되었습니다. 컬렉션에 어떻게 그리고 어디에서 액세스하고 있습니까? 엔티티 외부에있는 경우 액세서 메소드를 사용하고 있는지 확인하십시오. – Chris

답변

1

외래 키가 필요하지 않습니다.

체크 로깅 활성화하여 생성 된 SQL ("eclipselink.logging.level을"= "최상의")

데이터가 존재하는지 같은 데이터베이스와 동일한 SQL 실행을보십시오.

또한 null 컬렉션이있는 개체를 삽입/업데이트하여 공유 캐시가 손상되지 않도록하십시오. 양방향 관계의 양면을 유지해야합니다. 캐시를 비활성화하여 현재 수행중인 작업인지 확인할 수 있습니다.

+0

테스트를 위해 캐시를 비활성화했는데 문제가 해결되었으므로 논리를 검사하여 손상된 부분을 확인해야합니다. 고마워요! – CocheLee

0

FK 제약 조건을 알고있는 것은 필수 사항이 아닙니다. 한 번 같은 문제가 있었지만 (Oracle 9i) Entity 클래스의 이름이 매핑하려는 테이블의 이름과 일치해야하며 JPA SQL과 Hibernate HQL 모두 대소 문자를 구분하므로 작성시주의해야합니다 @Column 태그.

관련 문제