Hibernate - 三个实体合二为一 Table

Hibernate - Three Entities in One Table

我在实体 classes 中设置一些休眠注释时遇到问题。

我的问题是:我如何告诉 Hibernate,它应该将地址、姓名和客户信息存储在一个 table 中。此 table 应包含以下列:ID、Given、Surname、Street、HouseNumber、Zip、City、Phone、Comment。目前,Hibernate 在 mysql 数据库中为每个实体生成一个 table。因此有必要在每个实体中定义一个@Id class (Customer, Name, Address)。但我想将所有信息保存在一个 table 中,只有一个客户的 @Id。

我该如何解决这个问题?

您可以在下面找到客户、名称和地址实体的摘录 classes:

@Entity
@Table(name = "customer")
@XmlRootElement
public class Customer {
    @Id
    @GeneratedValue
    private int id;
    @OneToOne
    private Name name;
    @OneToOne
    private Address address;
    private String phone;
    private String comment;
    public Customer() { }
}

@Entity
@XmlRootElement
public class Name {
    private String given;
    private String surname;
    public Name() { }
}

@Entity
@XmlRootElement
public class Address {
    private String street;
    private String houseNumber;
    private String zip;
    private String city;
    public Address() { }
}

只有 Customer 应该用 @Entity 注释。其他 类 不是实体,只是 Customer 实体的一小部分。因此,它们应该用@Embeddable 进行注释。

@Entity
@Table(name = "customer")
public class Customer {
    @Id
    @GeneratedValue
    private int id;
    @Embedded
    private Name name;
    @Embedded
    private Address address;
    private String phone;
    private String comment;
    public Customer() { }
}

@Entity
public class Name {
    private String given;
    private String surname;
    public Name() { }
}

@Embeddable
public class Address {
    private String street;
    private String houseNumber;
    private String zip;
    private String city;
    public Address() { };
}