2015-09-16 7 views
0

Я пытаюсь сопоставить ассоциацию один-ко-многим к лицу, которое карта с @Inheritance(strategy=InheritanceType.JOINED) но у меня исключение проверки, когда мое приложение загрузки:JPA наследование и двунаправленная OneToMany отношение в детстве

Внутренняя Исключение: Исключение [EclipseLink-7250] (Затмение Постоянство Услуги 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException Исключение

Описание: [класс model.item.weapon.WeaponStat ] использует не-объект [класс 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 {... 

Класс Weapon, который наследует от Item:

@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

Правильно ли указано оружие со всеми другими объектами в файле persistence.xml? Является ли он аннотированным с правой javax.persistence.Entity аннотации? –

+0

Я фактически использую ' false' в моем файле persistence.xml. Если я вручную укажу все объекты с ' ...', то проблема будет такой же. Да импорт неправильный. – user5343250

+0

Вы не можете сделать это частное оружие; => личное оружие предметов; Я знаю, что он не всегда практичен, но имеет разные члены на Оружие, чем на Item, нарушает 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 (каскадный = CascadeType.ALL, принеси = FetchType.EAGER, mappedBy = "оружие")' '@ JoinColumn (nullable = true) ' ' private List Статистика; ' – user5343250