2017-08-04 109 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