加载时JPA/Hibernate继承:IllegalArgumentException,尝试设置错误的子类
我使用的是JBoss 6.1,我遇到了JPA缠绕的情况,因此我得到了以下错误消息: IllegalArgumentException:无法将设备B field EquipmentCycleB.equipment设置为设备A 假设每个实体都有一个@Id注释字段: 第一等级加载时JPA/Hibernate继承:IllegalArgumentException,尝试设置错误的子类,jpa,jpa-2.0,java-ee-6,jboss6.x,Jpa,Jpa 2.0,Java Ee 6,Jboss6.x,我使用的是JBoss 6.1,我遇到了JPA缠绕的情况,因此我得到了以下错误消息: IllegalArgumentException:无法将设备B field EquipmentCycleB.equipment设置为设备A 假设每个实体都有一个@Id注释字段: 第一等级 @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "DIS", discriminatorType
@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;
...
}
最后,当我尝试加载id为1的EnityWithState时,我得到了以下错误:
IllegalArgumentException:无法将设备B field EquipmentCycleB.equipment设置为设备A
有人知道吗?我在谷歌上搜索了一下,但什么也没找到。
可能是Hibernate/JPA错误吗
提前谢谢你的帮助
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