Я использую JBoss 6.1, у меня возникла ситуация с JPA, в результате я получил следующее сообщение об ошибке:
IllegalArgumentException: Невозможно установить поле EquipmentB, поле EquipmentCycleB.оборудование для EquipmentA
предположим, что у каждого объекта есть аннотированное поле @Id:
Первая иерархия
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DIS", discriminatorType = DiscriminatorType.STRING, length = 1)
public abstract class Equipment { ... }
@Entity
@DiscriminatorValue("A")
public class EquipmentA extends Equipment { ... }
@Entity
@DiscriminatorValue("B")
public class EquipmentB extends Equipment { ... }
Вторая иерархия
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DIS", discriminatorType = DiscriminatorType.STRING, length = 10)
public abstract class EquipmentCycle {
...
}
@Entity
@DiscriminatorValue("A")
public class EquipmentCycleA extends EquipmentCycle {
@JoinColumn(name = "EQUIPMENT_ID", referencedColumnName = "ID")
@ManyToOne
private EquipmentA equipment;
...
}
@Entity
@DiscriminatorValue("B")
public class EquipmentCycleB extends EquipmentCycle {
@JoinColumn(name = "EQUIPMENT_ID", referencedColumnName = "ID")
@ManyToOne
private EquipmentB equipment;
...
}
Пока ничего странного, продолжай, класс скажет Статус
@Entity
public class State {
@JoinColumn(name = "ENTITY_ID", referencedColumnName = "ID", nullable = false)
@ManyToOne
private EnityWithState enityWithState;
@JoinColumn(name = "EQUIPMENT_ID", referencedColumnName = "ID")
@ManyToOne
private Equipment equipment;
@JoinColumn(name = "EQUIPMENT_CYCLE_ID", referencedColumnName = "ID")
@ManyToOne
private EquipmentCycle equipmentCycle;
...
}
и класс, к которому принадлежит государство
public class EnityWithState {
...
@OneToMany(mappedBy = "enityWithState", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<State> stateHistory;
...
}
Не спрашивайте меня, почему, я только что нашел это.
Через некоторое время в БД сохранятся следующие данные
Table Equipment
ID DIS
--------------------------------
1 A ...
2 B ...
Table EquipmentCycle
ID DIS EQUIPMENT_ID
--------------------------------
1 A 1
2 B 2
Table State
ID ENTITY_ID EQUIPMENT_ID EQUIPMENT_CYCLE_ID
---------------------------------------------
1 1 1 1
2 1 2 2
И, наконец, когда я пытаюсь загрузить EnityWithState с идентификатором 1, я получаю следующую ошибку:
IllegalArgumentException: Невозможно установить поле EquipmentB, поле EquipmentCycleB.оборудование для EquipmentA
У кого-нибудь есть идеи? Я погуглил, но ничего не нашел.
Может ли это быть ошибка Hibernate / JPA?
Заранее спасибо за помощь