Hibernate 如何修复java中的java.lang.ClassCastException
我使用hibernate的3.x版本,我有一个从父对象Y继承的对象x。我还有另一个对象Z,它与对象x有如下关系Hibernate 如何修复java中的java.lang.ClassCastException,hibernate,casting,classcastexception,Hibernate,Casting,Classcastexception,我使用hibernate的3.x版本,我有一个从父对象Y继承的对象x。我还有另一个对象Z,它与对象x有如下关系x OneToMany Z。因此,对象Z将包含对象X 我读了很多问题,但都没有回答我的问题 在我的XHTML中,我在下拉列表中选择了X对象,我检索它的id来加载对象,在我的bean中,我检索这个id来加载X对象。插入是通过插入带有空值的对象X来完成的。当我试图通过调用我的服务显示对象是否已恢复时,会出现此错误 An Error Occurred: java.lang.ClassCast
x OneToMany Z
。因此,对象Z将包含对象X
我读了很多问题,但都没有回答我的问题
在我的XHTML中,我在下拉列表中选择了X对象,我检索它的id来加载对象,在我的bean中,我检索这个id来加载X对象。插入是通过插入带有空值的对象X来完成的。当我试图通过调用我的服务显示对象是否已恢复时,会出现此错误
An Error Occurred:
java.lang.ClassCastException: ma.controle.gestion.modele.Parent_$$_javassist_6 cannot be cast to ma.controle.gestion.modele.Activite
这是父对象(Y)
这是从Y(X)继承的对象
这是我的豆子的功能保存
public void save(ActionListener e){
Activite activite=(Activite)parentService.findParentById(idt_parent);
System.out.println("Activite nom ====> " + activite .getNom() + " et la description" + activite.getDescription() );
affectationActivite.setActivite(activite);
affectationActiviteService.addAffectation(affectationActivite);
}
解决方案:我认为这是因为当您使用父服务时,它返回一个新的父服务,而不包含活动类的值。你应该改用主动服务
与@Ronce96相关,我认为这是因为当您使用父服务时,它返回一个新的父服务,而没有活动类的值。您应该使用Active service而不是发布findParentById()方法的实现吗?我认为最好的做法是为父类创建一个服务类,为Activite创建另一个服务类,只要您在一个类中可能需要一些在另一个类中不需要的操作。假设您想通过code_sa创建一个findBy,您将在activite服务中实现它,而不是在父类中实现它,因此,如果您使用entityManager,那么我将为每个类使用一个服务作为一个adition,您必须指定要查找的实例的id和类。在您的情况下,如果您想查找父对象,但id属于Activite类行,则只要Discrimator列与您想要的类的鉴别器值不匹配,就会引发异常。如果此注释有帮助,我感谢您的支持。
@Entity
@DiscriminatorValue("ACTIVITE")
public class Activite extends Parent implements Serializable {
private static final long serialVersionUID = 1L;
private String code_sa;
// The mapping of the object Z
@OneToMany(mappedBy="activite",cascade=CascadeType.REMOVE, orphanRemoval = true)
private Collection<Affectation_Activite> affectation_Activites;
// Getters , setters and construct
}
@Entity
public class Affectation_Activite implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long idt_affectation_activite;
private Date dateDebut;
private Date dateFin;
@ManyToOne
@JoinColumn(name="idt_parent")
private Activite activite;
// Getters, setters and construct
}
public void save(ActionListener e){
Activite activite=(Activite)parentService.findParentById(idt_parent);
System.out.println("Activite nom ====> " + activite .getNom() + " et la description" + activite.getDescription() );
affectationActivite.setActivite(activite);
affectationActiviteService.addAffectation(affectationActivite);
}