gpt4 book ai didi

java - 如何在hibernate中填充相同pojo类型的两个子成员变量

转载 作者:行者123 更新时间:2023-12-01 12:13:05 25 4
gpt4 key购买 nike

我有一个具有复合主键的父表( idOneidTwo ):

Parent table 
-----------------
idOne | idTwo |......other columns
-----------------
1 | 11191
2 | 11191

还有一个子表。子表键由( idOneidTwochild_type )组成:

Child table
------------------------------------------
idOne | idTwo | child_type .......other columns
-------------------------------------------
1 | 11191 | typeOne
2 | 11191 | typeTwo

POJO 结构有点不同。父 POJO 有两个引用类型的变量 Child 。下面是Parent POJO结构

Parent 
------------
Child typeOneChild;
Child typeTwoChild;

因此,在从数据库检索数据并填充父 pojo 时,我还需要填充 typeOneChildtypeTwoChild pojos,基于child_type列值。如果child_type列值为 typeOne ,那么此行将用于填充 typeOneChild pojo 和列值 typeTwo它将填充 typeTwoChild

所以基本上当我检索父级详细信息时,它应该执行以下 sql:

Select * from parent table where idOne=1 and idTwo=11191;

Select * from child table where idOne=1 and idTwo=11191 and child_type= 'typeOne'

Select * from child table where idOne=1 and idTwo=11191 and child_type= 'typeTwo'

我知道在正常情况下,表和pojo结构并不符合预期,但我们无法更改表和模型结构。那么请告诉我如何在 hibernate 中实现这一目标?

最佳答案

您应该能够使用带有鉴别器列的单表继承策略来执行此操作,如下所示:

@Entity
@Inheritance
@DiscriminatorColumn(name="child_type")
@Table(name="CHILD")
public abstract class Child {

@OneToOne
//specify the join here
private Parent parent;
}

@Entity
@DiscriminatorValue("typeOne")
public class TypeOneChild extends Child {

}

@Entity
@DiscriminatorValue("typeTwo")
public class TypeTwoChild extends Child {

}

@Entity
@Table(name="PARENT")
public class Parent {

@OneToOne(mappedBy = "parent)
private TypeOneChild typeOneChild;

@OneToOne(mappedBy = "parent)
private TypeTwoChild typeTwoChild;
}

关于java - 如何在hibernate中填充相同pojo类型的两个子成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27173049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com