我们假设我有2个人:Body
和Leg
。 Leg
包含字段side
(其值可以是Left
或Right
),还有Body
的外键。
我确定Body
的每个实例只剩下一个,只有一个右腿。所以我想根据One-To-One
字段的值在Body
和Leg
之间创建2个side
映射。
换句话说,我在数据库级别上有One-To-Many
关系,并希望在模型中获得One-To-One
。有可能吗?
Body.scala
@Entity
@Table(name = "body")
case class Body(
@(Id@field)
var id: String = null,
@(OneToOne@field)(cascade = Array(CascadeType.ALL), mappedBy = "body")
var leftLeg: Leg = null,
@(OneToOne@field)(cascade = Array(CascadeType.ALL), mappedBy = "body")
var rightLeg: Leg = null
)
Leg.scala
@Entity
@Table(name = "leg")
case class Leg(
@(Id@field)
var id: String = null,
@(OneToOne@field)
@(JoinColumn@field)(name = "body_id")
var body: Body = null,
@(Column@field)
var side: String = null
)
当然,我可以将其作为One-To-Many
并为每条腿添加2个吸气剂,但我还需要在reporsitory中按左腿(例如)过滤,所以想要写这样的东西
@Query(value = "select b from Body b where b.id = ?1 and b.leftLeg.size = ?2)
def findBodyByLegSize(bodyId: String, size: String): Body
答案 0 :(得分:0)
唯一的解决方案是将Leg Class复制到 LeftLeg 和 RightLeg 并创建两个Leg表(可以使用extends)
@Entity
@Table(name = "LeftLeg")
case class LeftLeg (
@(Id@field)
var id: String = null,
@(OneToOne@field)
@(JoinColumn@field)(name = "body_id")
var body: Body = null,
@(Column@field)
var side: String = null
)