当我从实体类中自动生成表格时,我对JPA如何处理1:1单向关系感到困惑。如果我自己创建SQL表格,我将如何制作这些表格。
我的问题是如何设置外键。
假设我有一个Customer实体和一个这样的地址实体:
@Entity
public class Customer{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(cascade = CascadeType.ALL)
private Address address;
//setters and getters
}
@Entity
public class Address{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String streetName;
//setters and getters
}
如果我从这两个实体类生成sql表,那么Customer表将有一个引用Address表的外键列。
有没有办法让OneAoOne单向关系,其中JPA将外键粘贴在目标表(地址表)上,而不是像我在代码示例中那样粘贴在Customer表上,或者我是否必须使用它双向关系并使用@Mapping注释显示更明确的所有权以实现这种表结构?
答案 0 :(得分:1)
要使外键出现在另一个表上以获得1-1单向关系,您需要切换“拥有”方:将客户放入地址并从客户中删除地址。然后客户的外键将在地址表中。
答案 1 :(得分:0)
首先,您必须从Customer实体映射您的address_id(或类似的东西)。例如,使用以下代码,您将引用客户的地址。
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="ADDRESS_ID")
private Address address;
从地址表中删除任何条目时,必须先从Customer表中删除该条目,以避免出现外键冲突错误。然后你可以从地址表中删除。从表中删除任何行时,JPA不处理此关系。