Hibernate One-to-Many не возвращает полный набор результатов - PullRequest
2 голосов
/ 12 апреля 2011

У меня есть спящий объект (paygrade) с несколькими дочерними элементами (paysteps), и я пытаюсь запросить этих дочерних элементов в приложении.К сожалению, я могу получить только первую запись запроса.Вот сущности

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

}

При вызове метода getPaygradeSteps () экземпляра paygrade приведенный ниже запрос вызывается hibernate:

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'

Запрос возвращает 9 результатов из базы данных,но hibernate только когда-либо получает первую запись.Я предполагаю, что это может иметь какое-то отношение к составному ключу paystep (опасность использования hibernate с устаревшей базой данных).

Кто-нибудь знает, почему это поведение появилось?

1 Ответ

0 голосов
/ 12 апреля 2011

Вам необходимо указать столбец соединения "grade_code" в ссылке OneToMany и сделать его обратным.

Кстати: SQL-запрос в вашем вопросе получает tv_grade_point, а не Paystep.

...