[英]JPA Hibernate foreign key is stored in the wrong table
我有这个基本设置,但我真的不明白,为什么我会得到我得到的行为
用户
@Entity
@Table(name = "USER")
@UserDefinition
public class User {
@Id
@SequenceGenerator(name = "userSeq", sequenceName = "ZSEQ_USER_ID", allocationSize = 1, initialValue = 1)
@GeneratedValue(generator = "userSeq")
@Column(name = "id", unique = true)
private Long id;
@OneToOne(cascade = CascadeType.ALL)
private Address address;
@OneToOne(cascade = CascadeType.ALL)
private ActivityForum activityForum;
@OneToMany(mappedBy="user",cascade = {CascadeType.ALL},fetch=FetchType.LAZY )
private List<Phone> phones = new ArrayList<>();
//ctor...
//getter/setter...
}
活动论坛
@Entity
@Table(name = "Actvity_Forum")
public class ActivityForum {
@Id
@SequenceGenerator(name = "afcSeq", sequenceName = "ZSEQ_af_ID",allocationSize = 1,initialValue = 1)
@GeneratedValue(generator = "afSeq")
@Column(name = "id", unique = true)
private Long id;
@OneToOne(mappedBy = "activityForum")
@JoinColumn(name = "user_id", referencedColumnName = "id")
private User user;
//ctor...
//getter/setter...
}
电话
@Entity
@Table(name ="PHONE")
public class Phone{
@Id
@SequenceGenerator(name = "phoneSeq", sequenceName = "ZSEQ_phone_ID", allocationSize = 1, initialValue = 1)
@GeneratedValue(generator = "phoneSeq")
@Column(name = "id", unique = true)
private Long id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name ="user_id", referencedColumnName="id")
private User user;
//ctor...
//getter/setter...
}
这是生成的数据库布局。
我在 src 代码中留下了一些列,以使帖子更短。
在我问这个问题之前,我做了一些研究,发现外键存储在关系所有者的表中。 所有者由@JoinColumn 注释确定。 它适用于电话多对一关系。
问题:为什么 Key 存储在 User 表中。 而不是在活动表中。
我正在使用什么。 Java 11 Quarkus LTS Gradle 6.71 MySQL DB
随着@vincendep 和@crizzis 的评论,我很快就发现了我的错误。
解释:定义实体之间关系的方向对数据库映射没有影响。 它只定义了我们在域 model 中使用该关系的方向。
对于双向关系,我们通常定义:
拥有方逆或引用方 @JoinColumn 注释帮助我们指定我们将用于连接实体关联或元素集合的列。 另一方面, mappedBy属性用于定义关系的引用方(非拥有方) 。
代码更改:
用户
@OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
private ActivityForum activityForum;
活动论坛
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", referencedColumnName = "id")
private User user;
生成的数据库布局:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.