Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加载时JPA/Hibernate继承:IllegalArgumentException,尝试设置错误的子类_Jpa_Jpa 2.0_Java Ee 6_Jboss6.x - Fatal编程技术网

加载时JPA/Hibernate继承:IllegalArgumentException,尝试设置错误的子类

加载时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

我使用的是JBoss 6.1,我遇到了JPA缠绕的情况,因此我得到了以下错误消息:

IllegalArgumentException:无法将设备B field EquipmentCycleB.equipment设置为设备A

假设每个实体都有一个@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;

    ...

}
最后,当我尝试加载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