java.lang.ClassCastException:[Ljava.lang.Object;无法施展 [英] java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to

查看:220
本文介绍了java.lang.ClassCastException:[Ljava.lang.Object;无法施展的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么在我的程序中触发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 objects 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆