2015-05-31 70 views
0

我在實體類中設置了一些hibernate註釋時遇到問題。休眠 - 一個表中有三個實體

我的問題是:我如何告訴Hibernate,它應該只在一張表中存儲地址,名稱和客戶信息。此表應具有以下列:ID,給定,姓氏,街道,HouseNumber,郵編,城市,電話,評論。目前Hibernate爲每個實體在mysql數據庫中生成一個表。因此,有必要在每個實體類(Customer,Name,Address)中定義一個@Id。但是我想把所有的信息都放在一張表中,只給客戶一個@Id。

我該如何解決這個問題?

下面你可以找到客戶的提取物,名稱和地址實體類:

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

回答

3

只有Customer@Entity進行註釋。其他類不是實體,而只是客戶實體的一小部分。因此他們應該用@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() { }; 
}