2013-01-03 47 views
3

當我們在使用@ElementCollection和@CollectionTable批註的實體中使用Embed-able(基本類型如String ..等)對象時,新表被創建,但在新表中如何在列中聲明主鍵約束?以下是我的代碼JPA 2:如何在JPA2中聲明@ElementCollection表中的主鍵列

public class Employee { 
@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private int id; 
private String name; 
private String salary; 
@Transient 
private String phnNum; 
@Enumerated(EnumType.STRING) 
private EmployeeType type; 

@ElementCollection 
@CollectionTable(name="vacations" , [email protected](name="Emp_Id")) 
private Collection<Vacation> vacationBooking; 

@ElementCollection 
private Set<String> nickNames; 

    ................... 

使用此代碼在模式中創建「休假」和「employee_nickname」兩個表。但我想在這兩個表中聲明一個主鍵列。我爲此做了什麼?

+0

您可以放置​​完整的代碼,包括Vacation類的代碼嗎? –

回答

0

您的意思是說,您希望將Employee表中的'id'作爲外鍵分配給Vacation表嗎? 在這種情況下,您應該使用@OneToMany而不是@ElementCollection

+0

不,使用此代碼創建兩個表是假期和nickNames,這些表是在運行時創建的。在這些表中沒有主鍵列。我想在這個表中聲明主鍵列。 –

+0

你把完整的代碼。如果您已經在假期課程中擁有主鍵屬性,或者您是否想要創建代理主鍵,請務必提及。沒有代碼,它很難理解你想要什麼。只是爲了提醒你,由hibernate創建的表總是有一個主鍵。 Hibernate是ORM工具。 R代表「Relational」,沒有主鍵,沒有「R」:) –

+0

他是表'vacations'上的主鍵。像'PK(Emp_Id,vacationBooking)'。 – Panthro

相關問題