2017-08-04 99 views
1

我有被映射到一個表,並標註有@Entity像這樣一個聚會類:非實體類擴展實體

@entity 
@Table(name = "PARTY") 
public class party{ 

    @Id 
    protected long partyId; 
} 

我也有表示地址的類:

@entity 
@Table(name = "ADDRESS") 
public class address{ 

    @Id 
    protected long partyId; 
} 

參與方ID可用作外鍵以獲取地址表中的地址。

有時候我想要自己退回一個派對,有時我想退回一個地址派對。我想我可能只是做延伸黨,但在像這樣的地址增加了一個單獨的類:

public class partyWithAddress extends party{ 

    @OneToMany 
    private List<Address> addresses; 
} 

但我得到一個錯誤:

Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: partyWithAddress

我讀到實體繼承,但我還是很漂亮丟失。誰能幫忙?

+0

爲什麼要創建另一個類?只需爲此任務創建另一種方法。 –

+0

@ShadabFaiz你是什麼意思創建另一種方法?在模型上? – ejgreenwald

回答

1

如果您的類不是實體,那麼它不會被JPA識別,您需要先使用@Entity對其進行註釋,然後使用您希望使用的繼承策略,默認情況下使用可單繼承,這意味着所有孩子和他們的父母是在一個表中,這在情況下,建議大家不要有你的實體太大的區別,有關繼承的更多信息,請查看本link

0

我強烈建議避免繼承hereand只需添加

@OneToMany 
List<Address> addresses; 

Party實體,並且handl在你的代碼中,這個Addresses列表的情況爲空/空。

+0

感謝您的回答。我使用pojos作爲控制器返回某些路線的模型。有些路線我不想返回一個地址,即使有一個。 – ejgreenwald

+0

然後,您需要將兩個單獨的實體類映射到同一個數據庫表,如果您的'PartyWithAddress'類不是實體,那麼JPA將不會使用地址來解析其@ OneToMany'關係。這隻發生在實體上。 對於給定的數據庫行,是否希望能夠將它作爲'Party'和'PartyWithAddress'返回,還是隻想將給定的行作爲一種類型或另一種類型對待? – Ben

+0

謝謝你回到我身邊。只是一種類型或其他類型。基本上我試圖返回一個帶有嵌套地址的派對信息的JSON,但有時我想返回一個帶派對的JSON並且沒有嵌套地址 – ejgreenwald