Hibernate - 一个表中的三个实体

时间:2015-05-31 12:19:29

标签: java mysql hibernate jpa one-to-one

我在实体类中设置一些hibernate注释时遇到问题。

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

我该如何解决这个问题?

您可以在下面找到Customer,Name和Address实体类的摘录:

@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() { }
}

1 个答案:

答案 0 :(得分:3)

只有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() { };
}