2011-04-12 7 views
2

저는 여러 아이들 (급여 단계)이있는 최대 절전 모드 엔티티 (paygrade)를 가지고 있으며,이 아이들을 앱에서 쿼리하려고합니다. 불행히도 쿼리의 첫 번째 레코드 만 검색 할 수 있습니다. 여기 paygrade 인스턴스의() 메소드 getPaygradeSteps를 호출 할 때 아래 쿼리가 최대 절전 모드에 의해 호출최대 절전 모드 일대 다 전체 결과 집합을 반환하지 않습니다.

public class Paygrade extends Persistent { 

    @Id 
    @Column(length = 80, updatable=false) 
    private String code; 

    @Column(length = 80, updatable=false) 
    private String name; 

    @OneToMany(mappedBy = "paygrade", fetch = FetchType.LAZY) 
    @ForeignKey(name = "none") 
    private Set<Paystep> paygradeSteps = new HashSet<Paystep>(); 

    // getters and setters 
} 


@IdClass(PaystepPK.class) 
public class Paystep { 

    @Id 
    @Column(length = 80, updatable=false) 
    protected String gradeCode; 

    @Column(length = 80, updatable=false) 
    protected String gradeName; 

    @Id 
    @Column(length = 80, updatable=false) 
    protected String scaleCode; 

    @Column(length = 80, updatable=false) 
    protected String scaleName; 

    @Column(length = 80, updatable=false) 
    protected String scalePoint; 

    @Column(updatable=false) 
    protected Long scaleValue; 

    @ManyToOne 
    @ForeignKey(name = "none") 
    @JoinColumn (name="grade_code", updatable = false, insertable = false) 
    private Paygrade paygrade; 

    // getters and setters 

} 

엔티티는 다음과 같습니다 쿼리는 데이터베이스에서 9 개 결과를 반환하지만 오직 최대 절전 모드

Hibernate: 
/* load one-to-many ...Paygrade.paygradeSteps */ select 
    paygradest0_.grade_code as grade1_38_1_, 
    paygradest0_.grade_code as grade1_1_, 
    paygradest0_.scale_code as scale2_1_, 
    paygradest0_.grade_code as grade1_39_0_, 
    paygradest0_.scale_code as scale2_39_0_, 
    paygradest0_.grade_name as grade3_39_0_, 
    paygradest0_.scale_name as scale4_39_0_, 
    paygradest0_.scale_point as scale5_39_0_, 
    paygradest0_.scale_value as scale6_39_0_ 
from 
    tv_grade_point paygradest0_ 
where 
    paygradest0_.grade_code= 'Grade 9' 

첫 번째 레코드를 검색합니다. 나는 paystep (레거시 데이터베이스와 함께 최대 절전 모드를 사용할 때의 위험)의 복합 키와 관련이 있다고 가정하고 있습니다.

이 동작이 왜 발생했는지 아는 사람이 있습니까?

답변

0

OneToMany 참조에 조인 열 "grade_code"을 지정하고 역으로 만들어야합니다.

그건 그렇고 : 귀하의 질문에 SQL 쿼리는 페이 스텝이 아닌 tv_grade_point를 검색하고 있습니다.

관련 문제