我在实体类中设置一些hibernate注释时遇到了一个问题。
我的问题是:我如何告诉Hibernate,它应该在一个表中存储地址,名称和客户信息。该表应该包含以下列:ID、Given、姓氏、Street、houseenumber、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() { }
}
只有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() { };
}