如何在 Java 中修复 java.lang.ClassCastException
How to fix java.lang.ClassCastException in Java
我使用 3.x 版本的休眠,我有一个对象 X 继承自父对象 Y。我还有另一个对象 Z,它与对象 X 的关系如下 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 )
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE_OBJET")
@DiscriminatorValue("PARENT")
public class Parent implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long idt_parent;
private String nom;
private String description;
// Getters Setters
}
这是继承自 Y ( X ) 的对象
@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
}
这是模型(对象 Z)
@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
}
这是我的 bean 的功能保存
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);
}
解决方案:我认为这是因为当您使用父服务时,它返回一个没有 Active class 值的新父服务。您应该改用 Active 服务
与@Ronce96相关
我使用 3.x 版本的休眠,我有一个对象 X 继承自父对象 Y。我还有另一个对象 Z,它与对象 X 的关系如下 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 )
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE_OBJET")
@DiscriminatorValue("PARENT")
public class Parent implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long idt_parent;
private String nom;
private String description;
// Getters Setters
}
这是继承自 Y ( X ) 的对象
@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
}
这是模型(对象 Z)
@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
}
这是我的 bean 的功能保存
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);
}
解决方案:我认为这是因为当您使用父服务时,它返回一个没有 Active class 值的新父服务。您应该改用 Active 服务
与@Ronce96相关