java.lang.ClassCastException:[Ljava.lang.Object;无法施展 [英] java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to
问题描述
为什么在我的程序中触发java.lang.ClassCastException?
why java.lang.ClassCastException is triggered in my program ?
java.lang.ClassCastException:[Ljava.lang.Object;无法转换为
com.App.Equip]
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.App.Equip]
查询返回已回答的清单列表(在尚未通过装备对象回答
The query returns the list of checklists that are answered (found in the CheckLists calsse) and not yet answered by Equip object
- 这是代码:
import org.json.simple.*;
@SuppressWarnings("unchecked")
public JSONObject ListCheckListsNonETRepondu( long idEqp, long idmiss){
Query query = manager.createNativeQuery("SELECT"
+ " checksl.id_check_lists as IdCheckLists,"
+ " checksl.titre_check as NomCheckLists,"
+ " checksl.recommendation as Recommendation, "
+ " resp.id_responsescheck as IdResponse, "
+ " resp.conformite as Conformite, "
+ " resp.date_response as DateResponse, "
+ " resp.missions_id as IdMission "
+ " FROM equipements eq "
+ " LEFT JOIN check_lists checksl"
+ " ON eq.id_equipements= checksl.equipements_id "
+ " LEFT JOIN responses_check_lists resp "
+ " ON checksl.id_check_lists = resp.check_lists_id "
+ " AND resp.missions_id ="+idmiss+""
+ " AND eq.id_equipements ="+idEqp
+ " ORDER BY checksl.id_check_lists"
);
List<Equip> res = query.getResultList();
JSONObject obj = new JSONObject();
for( Equip eq: res) //--The problem is here --
{
for(CheckLists checks : eq.getChecks())
{
obj.put("idCheckLists", checks.getIdCheckLists());
obj.put("NomCheckLists", checks.getTitreCheck());
obj.put("Recommendation", checks.getRecommendation());
for(ResponsesCheckLists resp :checks.getResponsesChecks())
{
obj.put("IdResponse",resp.getIdResponsesCHeck());
obj.put("DateResponse",resp.getDateResponse());
obj.put("Conformite",resp.isConformite());
obj.put("IdMission",resp.getRespmission().getIdMission());
}
}
}
return (JSONObject)obj;
}
- 我的java类:
-My java classes:
@Entity
public class CheckLists implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="idCheckLists")
private long idCheckLists;
@Column(name="titreCheck")
private String titreCheck;
@Column(name="recommendation")
private String recommendation;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="equipements_id")
@JsonBackReference
private Equipements equipements;
@OneToMany(mappedBy="CheckLts", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
//@Fetch(value = FetchMode.SUBSELECT)
private Set<ResponsesCheckLists> ResponsesChecks;
..
}
//
@Entity
public class ResponsesCheckLists implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="idResponsesCHeck")
private long idResponsesCHeck;
@Column(name="conformite")
private boolean conformite;
@Column(name="dateResponse")
private String dateResponse;
@ManyToOne
@JoinColumn(name="missionsId")
private Missions Respmission;
@ManyToOne
@JoinColumn(name="checkLists_Id")
private CheckLists CheckLts;
....
}
//
@Entity
public class Equip implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="idEquipements")
private long idEquipements;
@Column(name="nomEq")
private String nomEq;
@Column(name="dateAjoutEq")
private String dateAjoutEq;
@Column(name="dateModificationEq")
private String dateModificationEq;
@OneToMany(mappedBy="equipements", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
//@Fetch(value = FetchMode.SUBSELECT)
@JsonManagedReference
private Set<CheckLists> checks;
@ManyToOne
@JoinColumn(name="actifs_id")
private Actifs actifsEquipements;
}
我想用Json格式格式化我的SQl查询的结果。
以下是SQL查询返回的内容 query.getResultList()
:
I want to format the result of my SQl query in Json format.
Here is what the SQL query returns query.getResultList()
:
[
[
1,
"2.1 Create Separate Partition ",
"Description.... ",
1,
false,
"25/05/2017",
15
],
[
2,
"2.2 Set nodev option ",
" Description:.... ",
1,
false,
"25/05/2017",
15
]
......
]
有人会介意给我一些建议吗?
could anyone mind giving some advice for me?
非常感谢!!!
推荐答案
您的查询返回列出
对象[]
,因为您没有选择装备
实体,但您只选择以下列:
Your query is returning a List
of Object[]
because you aren't selecting an Equip
Entity, but you are only selecting columns in :
Query query = manager.createNativeQuery("SELECT"
+ " checksl.id_check_lists as IdCheckLists,"
+ " checksl.titre_check as NomCheckLists,"
+ " checksl.recommendation as Recommendation, "
+ " resp.id_responsescheck as IdResponse, "
+ " resp.conformite as Conformite, "
+ " resp.date_response as DateResponse, "
+ " resp.missions_id as IdMission "
Hibernate不会转换 ResultSet
结果为装备
实体对象,结果将是一个对象
的数组,因为Hibernate不会确定所选列的类型。
Hibernate won't convert the ResultSet
results to an Equip
entity object, the result will be an array of object
s because Hibernate won't determine the types of selected columns.
你需要遍历这个 List
元素并转换每个对象[]
手动设置装备
对象。
You need to loop over this List
elements and transform each Object[]
to an Equip
object manually.
编辑:
这是你应该如何实现的:
This is how you should implement it:
List<Object[]> res = query.getResultList();
List<Equip> list= new ArrayList<Equip>();
JSONObject obj = new JSONObject();
Iterator it = res.iterator();
while(it.hasNext()){
Object[] line = it.next();
Equip eq = new Equip();
eq.setIdEquipement(line[0]);
eq.setTitre(line[1]);
eq.setDescription(line[2]);
//And set all the Equip fields here
//And last thing add it to the list
list.add(eq);
}
这篇关于java.lang.ClassCastException:[Ljava.lang.Object;无法施展的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!