Java Hibernate InheritanceType.JOINED条件投影和
我正在尝试使用Hibernate继承对来自多个子类的simular表上的值求和 在我的父类上使用“@heritance(strategy=InheritanceType.JOINED)”,并有多个子类扩展它。我的问题是,当我使用带有“Projections.sum”的条件来获得结果时,Hibernate执行了一个有趣的连接 就好像hibernate获取第一个匹配结果并对其进行求和一样——忽略其余部分,我甚至不确定这是否可以完成 希望我下面的代码能澄清我的问题 动物-父类Java Hibernate InheritanceType.JOINED条件投影和,java,postgresql,hibernate,inheritance,criteria,Java,Postgresql,Hibernate,Inheritance,Criteria,我正在尝试使用Hibernate继承对来自多个子类的simular表上的值求和 在我的父类上使用“@heritance(strategy=InheritanceType.JOINED)”,并有多个子类扩展它。我的问题是,当我使用带有“Projections.sum”的条件来获得结果时,Hibernate执行了一个有趣的连接 就好像hibernate获取第一个匹配结果并对其进行求和一样——忽略其余部分,我甚至不确定这是否可以完成 希望我下面的代码能澄清我的问题 动物-父类 @Entity @Inh
@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;
猫-儿童班
@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;
狗-儿童班
@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;
鸟类-儿童班
@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;
鱼-子类
@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
任何反馈都将不胜感激