背景:我正在升级到Hibernate 6.1.4(从5.3.x)的过程中,遇到了OneToOne双向Map的问题(这 * 看起来 * 是一个bug,我已经写了下来)。我正在寻找一个不需要更改模式的解决方案,并考虑使Map单向化,但遇到了一个问题。
下面是一个简化的起点:
@Entity
@Table(name = "PARENT_T")
public class Parent {
@Id
@Column(name = "PARENT_PK")
private Integer id;
@OneToOne(targetEntity = Child.class, mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Child child;
// getters and setters...
}
@Entity
@Table(name = "PARENT_T")
public class Child {
@Id
@Column(name = "CHILD_PK")
private Integer id;
@OneToOne(targetEntity = Parent.class, fetch = FetchType.EAGER)
@JoinColumn(name = "PARENT_FK", nullable = false)
private Parent parent;
// getters and setters...
}
因此,我想删除Child-to-ParentMap,只Map属性:
@Column(name = "PARENT_FK", nullable = false)
private Long parentFK;
但是,这意味着Parent中的mappedBy = "parent"
不再有效。我可以添加一个JoinColumn注解,但是根据文档,JoinColumn名称位于源实体(此处为Parent)中:
外键列的名称。在哪个表中找到该列取决于上下文。
如果联接是针对使用外键Map策略的OneToOne或ManyToOneMap,则外键列位于源实体的表中或可嵌入。
我看到了使用一对多Map的建议,因为:
如果连接是针对使用外键Map策略的单向OneToManyMap,则外键位于目标实体的表中。
...然后将其视为一对一。但是,这看起来像是一个杂七杂八的东西。
因此:是否有方法将外键列所在的OneToOne关系Map到目标实体(此处:子),而不是源(这里:母)?
从概念上讲,我只是在注解中寻找与mappedBy等效的表,类似于:@一对一(目标实体=子级.类,Map依据列=“父级FK”,级联=级联类型.ALL,获取=获取类型.LAZY)
谢谢你!
1条答案
按热度按时间nwo49xxi1#
请在此处尝试此Map: