为什么在我的程序中触发java.lang.ClassCastException?
java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为com.App.Equip]
该查询返回已回答(在CheckLists calsse中找到)但尚未由Equip对象回答的清单的列表
-这是代码:
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类:
@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;
}
我想将我的SQl查询的结果格式化为Json格式。这是SQL查询返回的内容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
]
......
]
有人介意给我一些建议吗?
非常感谢!!!
您的查询返回了List
of,Object[]
因为您没有选择Equip
Entity,而是只选择了中的列:
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
结果转换为Equip
实体对象,结果将是的数组,object
因为Hibernate不会确定所选列的类型。
您需要遍历此List
元素,然后将每个元素手动转换Object[]
为Equip
对象。
编辑:
这是您应如何实施:
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);
}
问题内容: 我想从数据库中获取价值,就我而言,我曾经从数据库中获取价值,但是却遇到了这个错误 这是我的代码 任何帮助将是荣幸:) @raffian,你的意思是这样吗? 问题答案: 问题是 这将返回一个 对象数组 列表 (Object []), 其中包含表中每一列的标量值。Hibernate将使用ResultSetMetadata推断返回的标量值的实际顺序和类型。 解 相关连结 使用迭代器
问题内容: Group.java 这是我的方法。 我认为还可以,但是有一些例外: HTTP状态500 –内部服务器错误h1 {font-family:Tahoma,Arial,sans-serif; color:white; background-color:#525D76; font-size:22px;} h2 {font-family:Tahoma,Arial,sans- 衬线;颜色:白色;
问题内容: 我需要将HashMap转换为String数组,以下是我的Java代码 当我运行代码时,得到以下内容。 问题答案: 返回,而不管泛型。您可以改用重载的变体: 另外,由于的方法不能保证顺序,并且您使用数组进行的所有操作都会打印出值,因此可以直接迭代: 编辑:只是为了完成图片,在Java 8中,该方法可用于使代码更加优雅:
问题内容: 我想在休眠状态查询两个表。用户实体中的featch 3表(User-Role-Profile)。用hql查询: 并运行查询: userentity类:此类是geteer和seter: userEntity.hbm.xml的休眠映射 和类hibernateutil创建会话: 问题答案: 因为使用的是多选投影,所以实际上是在获取对象数组,因此需要将查询结果处理逻辑更改为:
问题内容: 我正在运行以下查询。它显示一条错误消息。如何解决这个错误? 错误是: 问题答案: 您可以这样写: 已经是一个字符串列表,因为您只选择了一列。 此外,正如Thilo的答案所暗示的那样,您可以将结果直接转换为a 而不是使用。
我是JPA新手,当我使用@Query参数时,springboot无法获得api响应(我尝试实现内部连接) Repositoty类: 服务类别: 正在获取“[ljava . lang . object;无法强制转换”异常,之后我将其更改为如下: 服务等级 foreach添加了对象,但是对于上面的代码,我得到了空值<code>BeanUtils。copyProperties不起作用 请任何人建议如何解