Hibernate InheritanceType.JOINED条件投影金额

时间:2016-11-02 12:36:10

标签: java postgresql hibernate inheritance criteria

我试图使用Hibernate继承对来自多个子类的simular表的值进行求和。

使用" @Inheritance(strategy = InheritanceType.JOINED)"在我的父类上,并有多个子类扩展它。我的问题是当我使用Criteria和#34; Projections.sum"得到一个结果,Hibernate做了一个有趣的连接。

就好像hibernate获取第一个匹配结果并对其进行求和 - 忽略其余部分,我甚至不确定是否可以这样做。

希望我的代码能够澄清我的问题。

动物 - 家长级

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "animals")
public class Animals extends BaseObject{

    private Long animalId;
    private Long weight;

猫 - 儿童班

@Entity
@Table(name = "cats")
@PrimaryKeyJoinColumn(name="animal_id")
public class Cats extends Animals{

    private Long offspring;
    private String color;

狗 - 儿童班

@Entity
@Table(name = "dogs")
@PrimaryKeyJoinColumn(name="animal_id")
public class Dogs extends Animals{

    private Long offspring;
    private String color;
    private int eggsLayed;

鸟类 - 儿童班

@Entity
@Table(name = "birds")
@PrimaryKeyJoinColumn(name="animal_id")
public class Birds extends Animals {

    private Long offspring;
    private String color;
    private int eggsLayed;

鱼 - 儿童班

@Entity
@Table(name = "fish")
@PrimaryKeyJoinColumn(name="animal_id")
public class Fish extends Animals {

    private Long offspring;
    private String color;
    private int eggsLayed;

条件查询

    ProjectionList projList = Projections.projectionList()
            .add(Projections.sum("eggsLayed"));

    Criteria crit = getSession()
            .createCriteria(Animals.class)
            .setProjection(projList);

运行查询时的相关SQL输出:

Hibernate: 
    select
        sum(this_3_.eggs_layed) as y0_ 
    from
        animals this_ 
    left outer join
        cats this_1_ 
            on this_.animal_id=this_1_.animal_id 
    left outer join
        dogs this_2_ 
            on this_.animal_id=this_2_.animal_id 
    left outer join
        birds this_3_ 
            on this_.animal_id=this_3_.animal_id 
    left outer join
        fish this_4_ 
            on this_.animal_id=this_4_.animal_id

我们将不胜感激。

0 个答案:

没有答案