Java HQL查询抛出classCastException
我正在实现一个exists函数,该函数检查数据库中是否存在具有给定Id的实体:Java HQL查询抛出classCastException,java,sql,hibernate,orm,Java,Sql,Hibernate,Orm,我正在实现一个exists函数,该函数检查数据库中是否存在具有给定Id的实体: protected boolean[] _exists(final Serializable... ids) { //initlialize final boolean[] ret = new boolean[ids.length]; final StringBuilder sb = new StringBuilder("select id FROM " + getE
protected boolean[] _exists(final Serializable... ids) {
//initlialize
final boolean[] ret = new boolean[ids.length];
final StringBuilder sb = new StringBuilder("select id FROM " + getEntityMedaData(this.modelAdaptor.getDbModelClass()).getEntityName() + " obj " );
sb.append(" WHERE obj.id in (:ids) ");
LOG.debug("query = " + sb.toString() );
final Query query = getSession().createQuery(sb.toString());
query.setParameterList("ids", ids);
final List<Serializable> results = query.list(); //exception occurs here
System.out.println(results);
LOG.debug("number of ids found = " + results.size() );
final Set<Serializable> idsFoundSet = new HashSet<>(results);
for(int i=0 ;i< ids.length;i++){
if(idsFoundSet.contains(ids[i])){
ret[i]=true;
}
}
return ret;
}
课程:
@Embeddable
public class NodePK implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Basic(optional = false)
@Column(name = "NETWORKID")
private String networkid;
@Basic(optional = false)
@Column(name = "NODEID")
private String nodeid;
//setter getters
}
节点具有
@EmbeddedId
protected NodePK nodePK;
SQL/HQL
131987 [main] DEBUG org.hibernate.hql.internal.ast.QueryTranslatorImpl - HQL: select id FROM mypkg.NodeModel obj WHERE obj.id in (:ids)
131988 [main] DEBUG org.hibernate.hql.internal.ast.QueryTranslatorImpl - SQL: select nodemodel0_.NETWORKID as col_0_0_, nodemodel0_.NODEID as col_0_1_ from NODE nodemodel0_ where nodemodel0_.NETWORKID=? and nodemodel0_.NODEID=?
问题出在哪里?发现了问题。我正在构建一个NodePK列表,然后执行nodePkList.toArray。然后我将其传递给另一个接受序列化的方法。。。当我将其从序列化更改为。。。把它列出来是有效的。我想不知何故,在某个地方发生了一些事情 可能是您将字符串列表作为ids参数传递,而不是mypkg.NodePKs?我想不是,只是想检查一下..另外,如果您将hibernate配置映射文件或注释发布到您正在查询的类上,这将是一件好事for@perencia不,我没有通过列表。有关hibernate中的复合键映射[请参阅此问题][1][1]:@all:发现了问题。我正在构建一个nodepk列表,然后执行nodePkList.toArray。然后我将其传递给另一个接受序列化的方法。。。当我将其从序列化更改为。。。把它列出来是有效的。我想不知何故,在某个地方发生了一些事情。
131987 [main] DEBUG org.hibernate.hql.internal.ast.QueryTranslatorImpl - HQL: select id FROM mypkg.NodeModel obj WHERE obj.id in (:ids)
131988 [main] DEBUG org.hibernate.hql.internal.ast.QueryTranslatorImpl - SQL: select nodemodel0_.NETWORKID as col_0_0_, nodemodel0_.NODEID as col_0_1_ from NODE nodemodel0_ where nodemodel0_.NETWORKID=? and nodemodel0_.NODEID=?