Java 如何从列表中进行转换<;对象>;当使用Hibernate查询语言时?
我一直在从事一个hibernate/JPA项目,在开发过程中,我创建了一个方法来检索名为Appel\u Offre.java的对象列表,在运行时发生了一个异常。。。 方法如下: 我有一个对象Appel\u Offre.java和另一个对象Modalite\u Appel\u Offre.java 以下是两个对象的映射: Appel_Offre.javaJava 如何从列表中进行转换<;对象>;当使用Hibernate查询语言时?,java,hibernate,nhibernate-mapping,Java,Hibernate,Nhibernate Mapping,我一直在从事一个hibernate/JPA项目,在开发过程中,我创建了一个方法来检索名为Appel\u Offre.java的对象列表,在运行时发生了一个异常。。。 方法如下: 我有一个对象Appel\u Offre.java和另一个对象Modalite\u Appel\u Offre.java 以下是两个对象的映射: Appel_Offre.java @Entity @Table(name="Appel_offre") public class Appel_Off
@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\u Appel\u Offre.nom\u mod检索Appel\u 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;
}
发生异常:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to gest.BO.Appel_Offre
我不明白的是,我正在一个Appel\u Offre列表上循环,循环类型是Appel\u Offre为什么hibernate会触发此异常?
谢谢。解决此问题的一个更干净的方法是使用和 例如:
List cats = session.createSQLQuery(
"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, " +
"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... " +
"FROM CAT {cat} WHERE ROWNUM<10")
.addEntity("cat", Cat.class)
.list()
List cats=session.createSQLQuery(
选择{cat}.ID为{cat.ID},{cat}.SEX为{cat.SEX}+
“{cat}.MATE作为{cat.MATE},{cat}.SUBCLASS作为{cat.class},…”+
“从CAT{CAT}中,ROWNUM解决此问题的一个更干净的方法是使用和
例如:
List cats = session.createSQLQuery(
"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, " +
"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... " +
"FROM CAT {cat} WHERE ROWNUM<10")
.addEntity("cat", Cat.class)
.list()
List cats=session.createSQLQuery(
选择{cat}.ID为{cat.ID},{cat}.SEX为{cat.SEX}+
“{cat}.MATE作为{cat.MATE},{cat}.SUBCLASS作为{cat.class},…”+
“从CAT{CAT}那里ROWNUM我想这是你的问题:
from Appel_Offre m , Modalite_Appel_Offre mod where mod.nom_mod= ?
从Appel_Offre m,Modalite_Appel_Offre mod,其中mod.nom_mod=?
这不仅仅是请求Appel_Offre实例……它还请求Appel_Offre连接到Modalite_Appel_Offre(在FROM子句中有多个表)。
所以,Hibernate为您创建了一个奇怪的列表,它将是这两个表的复合联接:而不仅仅是Appel_of fre实例。
我可能误解了查询应该做什么。但是,无论如何,您只需要FROM子句中的Appel_Offre。类似于:
from Appel_Offre where m.ao = ?
来自Appel_Offre,其中m.ao=?
我想这是你的疑问:
from Appel_Offre m , Modalite_Appel_Offre mod where mod.nom_mod= ?
从Appel_Offre m,Modalite_Appel_Offre mod,其中mod.nom_mod=?
这不仅仅是请求Appel_Offre实例……它还请求Appel_Offre连接到Modalite_Appel_Offre(在FROM子句中有多个表)。
所以,Hibernate为您创建了一个奇怪的列表,它将是这两个表的复合联接:而不仅仅是Appel_of fre实例。
我可能误解了查询应该做什么。但是,无论如何,您只需要FROM子句中的Appel_Offre。类似于:
from Appel_Offre where m.ao = ?
来自Appel_Offre,其中m.ao=?
嗯,事实上,重读时我希望类转换在线(列表)会话。createQuery
…我将查询更改为“from Appel\u Offre m where m.nom\u mod=?”,但在列表上循环时我有一个NPE。嗯,实际上,重读时我希望类转换在线(列表)会话。createQuery
…我将查询更改为“来自Appel_Offre m,其中m.nom_mod=?”但我在列表上循环时有一个NPE。