hibernate fin inattendue de la sous-arborescence lorsque vous traitez avec de la collection de bases

j'ai l'entité suivante:

@Entity
public class AnalysisPolicy extends PersistentEntity{
    private Set nodeIds;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(
        name="analysis_policy_nodes",
        joinColumns=@JoinColumn(name="analysis_policy_id")
)
@Column(name="node_id")
public Set<Long> getNodeIds() {
    return nodeIds;
}

}

et im essayant la suite de la requête JPQL:

select p from AnalysisPolicy p where p.nodeIds is not empty

le résultat est quelque chose comme:

10:11:16,665 DEBUG [org.hibernate.hql.ast.AST] --- SQL AST ---
-[SELECT] QueryNode: 'SELECT'  querySpaces (AnalysisPolicy,analysis_policy_nodes)
+-[SELECT_CLAUSE] SelectClause: '{select clause}'
|  -[ALIAS_REF] IdentNode: 'analysispo0_.f_id as f1_8_' {alias=p, className=com.emc.dpa.datamodel.analysis.AnalysisPolicy, tableAlias=analysispo0_}
+-[FROM] FromClause: 'from' FromClause{level=1, fromElementCounter=1, fromElements=1, fromElementByClassAlias=[p], fromElementByTableAlias=[analysispo0_], fromElementsByPath=[], collectionJoinFromElementsByPath=[], impliedElements=[]}
|  -[FROM_FRAGMENT] FromElement: 'AnalysisPolicy analysispo0_' FromElement{explicit,collection join,not a fetch join,fetch non-lazy properties,classAlias=p,role=null,tableName=AnalysisPolicy,tableAlias=analysispo0_,origin=null,columns={,className=com.emc.dpa.datamodel.analysis.AnalysisPolicy}}
-[WHERE] SqlNode: 'where'
-[EXISTS] UnaryLogicOperatorNode: 'exists'
-[SELECT] QueryNode: 'SELECT'  querySpaces (AnalysisPolicy,analysis_policy_nodes)
+-[SELECT_CLAUSE] SelectClause: '{derived select clause}'
+-[FROM] FromClause: 'from' FromClause{level=2, fromElementCounter=0, fromElements=1, fromElementByClassAlias=[], fromElementByTableAlias=[nodeids1_], fromElementsByPath=[], collectionJoinFromElementsByPath=[p.nodeIds], impliedElements=[]}
|  -[FROM_FRAGMENT] ImpliedFromElement: 'analysis_policy_nodes nodeids1_' ImpliedFromElement{implied,collection join,not a fetch join,fetch non-lazy properties,classAlias=null,role=com.emc.dpa.datamodel.analysis.AnalysisPolicy.nodeIds,tableName={none},tableAlias=nodeids1_,origin=AnalysisPolicy analysispo0_,columns={,className=null}}
-[WHERE] SqlNode: 'WHERE'
-[THETA_JOINS] SqlNode: '{theta joins}'
-[SQL_TOKEN] SqlFragment: 'analysispo0_.f_id=nodeids1_.analysis_policy_id'

10:11:16,681 DEBUG [org.hibernate.hql.ast.ErrorCounter] throwQueryException() : no errors 10:11:16,712 ERROR [org.hibernate.hql.PARSER] :0:0: unexpected end of subtree

suivie par une longue trace de la pile. j'ai trouvé un similaire stackoverflow question ici où le problème est que la syntaxe est différente pour les collections d'entités de base, donc ce que je pense aujourd'hui, c'est que mon "n'est pas vide" doit être remplace par autre chose.
aussi, je ne pouvais pas obtenir "n'est pas nulle" pour le travail". taille(nodeIds)>1" fonctionne, mais le SQL généré a une sélection interne qui serait vraiment mauvais en termes de performances.

quelles sont mes façons de contourner cela? (en supposant que je ne veux pas de "mise à niveau" de la collection une collection d'entités).

OriginalL'auteur radai | 2011-01-04