Java HQL查询抛出classCastException

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

我正在实现一个exists函数,该函数检查数据库中是否存在具有给定Id的实体:

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=?