gpt4 book ai didi

java - 使用 Hibernate 查询语言时如何从列表 进行转换?

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:43 25 4
gpt4 key购买 nike

我一直在从事 hibernate/JPA 项目,在开发过程中我创建了一个方法来检索名为 Appel_Offre.java 的对象列表,但在运行时发生了异常...方法如下:我有一个对象 Appel_Offre.java 和另一个名为 Modalite_Appel_Offre.java 的对象这是两个对象的映射:Appel_Offre.java

     @Entity
@Table(name="Appel_offre")
public class Appel_Offre {

@Id
@Column(name="num_app_offre",nullable=false, updatable=true)
private String num_app_offre;

@Column(name="nom_maitre",nullable=false, updatable=true)
private String nom_maitre;

@Column(name="objet",nullable=false, updatable=true)
private String objet;

@Column(name="date_depot",nullable=false, updatable=true)
@Temporal(TemporalType.TIMESTAMP)
private Date date_depot;

@Column(name="date_soumission",nullable=false, updatable=true)
@Temporal(TemporalType.DATE)
private Date date_soumission;

@Column(name="garantie",nullable=false, updatable=true)
private int garantie;

@Column(name="delai_livraison",nullable=false, updatable=true)
private int delai_livraison;

@Column(name="caution_provisoir_total",nullable=false, updatable=true)
private float caution_provisoir_total;

@Column(name="commentaire",nullable=false, updatable=false)
private String commentaire;

@Column(name="etat",nullable=false, updatable=true)
private String etat;

@OneToMany(targetEntity=Lot.class,mappedBy="appel_offre", cascade= CascadeType.PERSIST,fetch= FetchType.LAZY)
private List<Lot> lots;

@OneToMany(targetEntity=Modalite_Appel_Offre.class,mappedBy="ao", cascade= CascadeType.PERSIST,fetch= FetchType.EAGER)
private List<Modalite_Appel_Offre> mod;

Modalite_Appel_Offre.java:

    @Entity
@Table(name="Modalite_appel_offre")
public class Modalite_Appel_Offre {

@Id
@TableGenerator(name="mod_id", table="modalite_id",pkColumnName="id_mod", pkColumnValue="value of the id",allocationSize=1)
@GeneratedValue(strategy= GenerationType.TABLE, generator="mod_id")
private int id_mod;

@Column(name="nom_modalite")
private String nom_mod;

@ManyToOne
@JoinColumn(name="ao")
private Appel_Offre ao;
//Getters & Setters

在我的方法中,我想通过 Modalite_Appel_Offre.nom_mod 检索 Appel_Offre 列表,这里是代码:

    public static List<Appel_Offre> getAppelOffreByModalite(Modalite_Appel_Offre mod){
List <Appel_Offre> lm=null;
try{
session=sf.openSession();
session.beginTransaction();
lm=(List <Appel_Offre>)session.createQuery("from Appel_Offre m , Modalite_Appel_Offre mod where mod.nom_mod= ?").setString(0, mod.getNom_mod()).list();
}
catch(Exception e){

}
finally{
session.close();
}
return lm;
}

当我循环返回的列表时:

     int i = 0;
for (Appel_Offre ap : lap) {
data[i][0] = ap.getNum_app_offre();
data[i][1] = ap.getNom_maitre();

i++;
} //data is an array of String

发生异常:

    java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to gest.BO.Appel_Offre

我不明白的是我正在循环 Appel_Offre 列表,并且循环类型是 Appel_Offre 为什么 hibernate 会触发此异常?谢谢。

最佳答案

我认为这是您的查询:

from Appel_Offre m , Modalite_Appel_Offre mod where mod.nom_mod= ?

这不仅仅是要求 Appel_Offre 实例...它要求将 Appel_Offre 连接到 Modalite_Appel_Offre (FROM 子句中有多个表)。因此,Hibernate 正在为您创建一个奇怪的列表,它将是这两个表的复合联接:而不仅仅是 Appel_Offre 实例。我可能误解了查询应该做什么。但是,无论如何,您只需要 FROM 子句中的 Appel_Offre 即可。像这样的东西:

from Appel_Offre where m.ao = ?

关于java - 使用 Hibernate 查询语言时如何从列表 <Objects> 进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14689706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com