2012-11-19 49 views
4

我有一個擴展了Model的User類和兩個我想擴展User類的類。Play Framework - 如何從超類繼承?

User.java:

@Entity 
@Table(name = "users") 
public class User extends Model implements RoleHolder { 

    private static final long serialVersionUID = 1L; 

    @Id 
    public Long id; 

... 

Driver.java:

public class Driver extends User { 
... 

Customer.java:

public class Customer extends User { 
... 

編輯 所有三個實體都需要直接訪問。換句話說,我有用戶,客戶和驅動程序;客戶和驅動程序恰好共享用戶的所有屬性。因此,我需要有一個有效的用戶實體以及客戶和驅動程序。

我需要能夠獲得所有用戶(包括客戶和驅動程序)的列表。

我一直無法弄清楚如何在Play中使用ebean進行這項工作。我怎樣才能做到這一點?

+0

對不起,確切的問題是什麼?你的意思是不能直接使用用戶? – emt14

回答

3

要保持User表具體,您可以使用@Inheritance註釋。有關這方面的討論見Play Framework 2 Ebean and InheritanceType as JOINED

也有可能是手動加入使用@OneToOne驅動程序和客戶附配表。

使用@OneToOne也將有利於構成而不是繼承,這被認爲是一種好的做法。

+1

感謝薩穆埃爾一個新的答案,我找到'@ OneToOne'前試過了'@ Inheritance'軌道。我走了那條路,我的問題解決了。謝謝! –

3

這可能是MappedSuperClass註釋的用例。有關文檔,請參閱http://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html。據推測,這是由Ebean支持的,儘管缺乏有關它的文檔。

+1

感謝塞繆爾,不幸的是,MappedSuperClass不允許用戶實體存在。如果我只需要訪問子類,這是完美的解決方案! –

+0

然後有一個'AbstractUser'超(MappedSuperClass)和'User'以及其他人繼承它 - 這是我不明白你爲什麼會確實需要使用'User'如此也。 – Samuel

+0

與你的建議的AbstractUser類的問題是,如果我想用戶的完整列表,我必須做三個查詢,一個是用戶,一個是客戶的,一個用於驅動程序。在我的模型中,客戶是一個用戶,一個驅動程序是一個用戶。 –