2012-09-05 50 views
1

我想在我的應用程序中實現用戶類型的繼承結構。用戶類型,jpa和Play的繼承問題!框架

@Entity 
@Table(name="User_") // Need this since "User" is a reserved name in SQL Server 
@Inheritance(strategy=InheritanceType.JOINED) 
public class User extends Model { 

    @Column(nullable=false,unique=true) 
    public String username; 

    ... 
} 

@Entity 
public class Employee extends User { 
    ... 
} 

@Entity 
public class Client extends User { 
    ... 
} 

當我這樣做,是那些獲得創建EmployeeClient表沒有任何外鍵的User_表,也沒有在User_表有EmployeeClient表的任何外鍵。我怎樣才能做到這一點?

理想情況下,我想要一個Employee.username列,它是User_的外鍵,所以我其他表可以引用Employee.username

我在使用Play! 1.2.5框架和SQL Server 2005

+1

確定沒有創建外鍵? 'id'列應該是一個外鍵。另外,您可以使用@Table(name =「\」User \「」)'。 – axtavt

+0

(必須刪除才能編輯評論)使用名稱時不帶下劃線'@Table(name =「Users」)''用戶'不受限制。使用Azure SQL進行檢查。 – biesior

+0

axtavt,你是對的。經過仔細檢查,id是FK和PK。我並不期待這一點。任何真正將用戶名作爲字符串顯示在「Employee」中的方式?我希望能夠在其他表上做到這一點:'@ManyToOne @JoinColumn(name =「employee」,referencedColumnName =「username」)public Employee employee;' –

回答

0

回答我的問題,因爲它已經有幾天了。

我問的第一個問題是:

當我這樣做,是那些獲得創建了員工和客戶表沒有任何外鍵的用戶_表,也沒有對用戶_表有任何外鍵僱員或客戶表。我怎樣才能做到這一點?

這是在評論中回答,謝謝axtavt!原來,id是主鍵的外鍵。


接下來,我在我的問題寫了這個:

理想情況下,我想一個Employee.username列,它是爲用戶_外鍵,所以我其他表可以有引用Employee.username。

並澄清/措辭在評論一個問題:

任何方式居然有用戶名作爲一個字符串Employee顯示?我希望能夠做到這一點的其他表:

@ManyToOne 
@JoinColumn(name="employee", referencedColumnName="username") 
public Employee employee; 

我從來沒有能夠找到一個適當的答案,所以我正在做的默認值(用數字id字段):

@ManyToOne 
public Employee employee; 

如果能解決這個問題,我很樂意接受其他答案。

0

我認爲你正在尋找這樣的:http://docs.oracle.com/javaee/5/api/javax/persistence/PrimaryKeyJoinColumn.html

而且,請注意,您應該實現一個鑑別值。

您可以在這裏的話題reaad起來:http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#d0e1168

+0

我曾嘗試實施'@ DiscriminatorValue'和'@ PrimaryKeyJoinColumn',但他們沒有對任何事物做任何事情,所以我擺脫了它們。也許我做錯了... –

+0

谷歌搜索會找到你的兩個使用的一些例子。 – Samuel