复杂对象的优化Hibernate查询

时间:2018-01-24 10:33:34

标签: hibernate spring-data-jpa

我想获得对象中"a_Id, b_id, c_Id"的映射。使用Spring-Data-JPA获取此信息的方式是什么?
我有以下表格和相应的实体。

Table A {                        Entity A {
    a_id,                              @Id pvt long aId;
    b_id,                              @ManyToOne
    c_id,                              @JoinColumn(name="b_id")
    a_field_1                          pvt B b;
                                       @ManyToOne
}                                      @JoinColumn(name="c_id")
                                       pvt C c;
                                       pvt String aField1;

Table B {                        Entity B {
    b_id,                              @Id pvt long bId;
    b_field_1,                         @OneToMany(mappedBy="b")
}                                      pvt A a;
                                       pvt String bField1;
                                 }

我们可以使用本机查询单独获取b_idc_id。但我们仍然需要将A,B,C之间的映射存储在对象中,以便知道C的哪些值与B相关。
我可能会遗漏一些非常简单的东西,但是找不到方法w / o使用a.getB().getBId(),这也意味着将执行每个b_Id的个别查询,我想避免这种情况,即使我已经通过本机查询获得了b_id。另外,我并不热衷于FetchType.EAGER使用getB()。任何建议都表示赞赏!

1 个答案:

答案 0 :(得分:0)

使用构造函数

尝试 DTO投影

使用构造函数

创建DTO类
class ABC {
    long aId,bId,cId, ...;
    public ABC( long aId, long bId, long cId, ...){
            //Set values here
    }
    //provide getters/setters
}

尝试将Hibernate查询视为

"select new " +
"   your.full.package.ABC(" +
"       a.aId, " +
"       b.bId, " +
"       c.cId, ..." +
"   ) " +
"from A a join a.b b join a.c c " +
"where some condition > :"