Spring JPA在一个实体中具有多个多对一关系

时间:2018-11-03 01:06:51

标签: java spring spring-boot jpa

我正在尝试创建一个实体,该用户具有两个地址,一个家庭住址和一个工作地址。

我不想将地址信息直接存储在User类中,而是对其进行规范化并将所有地址存储在一个表中,然后将其链接到用户。像这样:

@Entity
public class User {

    @Id
    private Integer id;
    private Address homeAddress;
    private Address workAddress;

    // getters and setters
}

@Entity
public class Address {

    @Id
    @GeneratedValue (strategy = GenerationType.AUTO)
    private Integer id;
    private String streetNumberAndName;
    private String apartmentOrSuiteNumber;
    private String city;
    private String state;
    private String zipcode;

    // getters and setters
}

如何使用Spring JPA做到这一点?我了解这是一个ManyToOne关系,但是我不确定如何将两个ManyToOne关系映射到一个实体。这有可能吗?

非常感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:1)

那真的很简单。只需将您的 User 类映射为:

@Entity
public class User {

    @Id
    private Integer id;

    @ManyToOne
    @JoinColumn(name = "fk_home_address")
    private Address homeAddress;

    @ManyToOne
    @JoinColumn(name = "fk_work_address")
    private Address workAddress;

    // getters and setters
}

表结构如下:

user(id, fk_home_address, fk_work_address)

请注意,这是单向关系。

如果您想了解更多信息,查找示例的最佳场所是here。 如果您正在寻找双向关系,请学习here

答案 1 :(得分:0)

private Integer id;
private Address homeAddress;
private Address workAddress;

在第一种情况下,您的结构表将是

user(id,home_address_id,work_address_id)

您可能会考虑采用第二种结构

private Integer id;
private List<Address> userddress;//using one to many

您的表结构将是

address(id,user_id)

这取决于您要如何组织结构。