JavaEE 1:1单向关系

时间:2014-01-05 05:07:36

标签: mysql java-ee jpa

当我从实体类中自动生成表格时,我对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注释显示更明确的所有权以实现这种表结构?

2 个答案:

答案 0 :(得分:1)

要使外键出现在另一个表上以获得1-1单向关系,您需要切换“拥有”方:将客户放入地址并从客户中删除地址。然后客户的外键将在地址表中。

答案 1 :(得分:0)

首先,您必须从Customer实体映射您的address_id(或类似的东西)。例如,使用以下代码,您将引用客户的地址。

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="ADDRESS_ID")
private Address address;

从地址表中删除任何条目时,必须先从Customer表中删除该条目,以避免出现外键冲突错误。然后你可以从地址表中删除。从表中删除任何行时,JPA不处理此关系。