2015-09-16 89 views
0

我想這樣的關聯映射一個一對多到是地圖@Inheritance(strategy=InheritanceType.JOINED)實體,但我有一個驗證異常時,我的加載應用程序:JPA繼承和兒童雙向一對多關係

內部異常:異常[的EclipseLink-7250](Eclipse持久 服務2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException異常

描述:[類model.item.weapon.WeaponStat ]使用非實體 [class item.weapon.Weapon]作爲目標實體關係 屬性[場上武器]。

這裏的基類:

@Entity 
@Table(name = "ITEMS") 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name = "SYSTYPE", discriminatorType = DiscriminatorType.INTEGER) 
@DiscriminatorValue(value = "0") 
public class Item implements Serializable {... 

Item繼承的類Weapon

@Entity 
@Table(name = "WEAPONS") 
@PrimaryKeyJoinColumn(name = "ITEM_ID") 
@DiscriminatorValue(value = "3") 
public class Weapon extends Item {... 

Weapon包含OneToMany屬性:

@OneToMany(mappedBy = "weapon") 
private List<WeaponStat> stats; 

WeaponStat

@Entity 
@Table(name = "WEAPON_STATS") 
public class WeaponStat implements Serializable {... 
[...code...] 
@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "WEAPON_ID") 
private Weapon weapon; 
[...code...] 

有人有想法?

+0

Is Weapon是否正確列出了persistence.xml文件中的所有其他實體?它是否註明了正確的javax.persistence.Entity註釋? –

+0

我實際上在我的persistence.xml中使用了 false。如果我用' ...'手動指定所有實體'問題是一樣的。 是的進口是正確的。 – user5343250

+0

你不能做它 私人武器武器; =>私人物品武器;我知道它並不總是實際可行,但武器上的成員不同於違反LSP的物品https://en.wikipedia.org/wiki/Liskov_substitution_principle –

回答

0

我用下面的:

@Entity 
@Configuration 
class Parent() 
{ 
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
    @JoinColumn(nullable = true) 
    private Set<Child> children; 
    ... 
} 

@Entity 
@Inheritance(strategy=InheritanceType.JOINED) 
public abstract class Child 
{ 
... 
} 

@Entity 
public class NaughtyChild extends Child 
{ 
... 
} 

這是使用Hibernate,但希望它幫助。請注意,這是一個奇怪的配置,Hibernate不推薦這樣做,至少由於生成的非優化查詢,但是特定於Hibernate。我無法與EclipseLink交談。

+0

同樣的問題:( '@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER,mappedBy =「weapon」)' '@ @ JoinColumn(nullable = true)' 'private List 統計;' – user5343250