Nessun tipo di dati per il nodo: org.hibernate.hql.internal.ast.tree.IdentNode HQL

Ho l’HQL dove cerco di ottenere artefatti privi di classificazione (quando attivo è 0)

artifacts = Artifact.findAll("FROM Artifact WHERE id NOT IN ( SELECT artifact_id FROM Classification WHERE active = 1) AND document_id = :docid",[docid:document.id], [max:limit, offset:startIndex]); 

Ogni volta che corro ottengo l’errore

 java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.IdentNode \-[IDENT] IdentNode: 'artifact_id' {originalText=artifact_id} 

Definizione di Classificaiton:

 class Classification { public static final String USER_DEFAULT = "USER" public static final String USER_SYSTEM = "SYSTEM" TaxonomyNode node String artifactId Boolean active String createdBy String updatedBy Date dateCreated Date lastUpdated static constraints = { node nullable:false, blank:false artifactId nullable:false, blank:false, unique: ['node'] active nullable: false, blank: false createdBy nullable:false, blank:false updatedBy nullable:false, blank:false } static mapping = { id generator:'sequence', params:[sequence:'classification_seq'] artifactId index: 'classify_by_artifact_node' node index: 'classify_by_artifact_node' active defaultValue: "1" } } 

Puoi riferirti ai precedenti problemi che ho dovuto affrontare per capire esattamente cosa sto provando a fare Quest 1 e Quest 2

Le query SQL utilizzano i nomi di colonna mentre le query HQL utilizzano le proprietà di class. Stai selezionando artifact_id dalla classificazione, ma la class di classificazione non ha una proprietà chiamata ‘artifact_id’. Per risolverlo, usa la proprietà della class nel tuo HQL.

 SELECT artifactId FROM Classification