web-dev-qa-db-fra.com

Aucun type de données pour le noeud: org.hibernate.hql.internal.ast.tree.IdentNode HQL

J'ai le HQL où j'essaie d'obtenir des artefacts sans classification (quand actif est 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]);

Chaque fois que je cours, j'obtiens l'erreur

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

Définition de la classe:

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"
    }
}

Vous pouvez vous référer aux problèmes que j’ai rencontrés pour comprendre ce que j’essaie exactement de faire Quête 1 et Quête 2

34
krs8785

Les requêtes SQL utilisent des noms de colonne, tandis que les requêtes HQL utilisent les propriétés de classe. Vous sélectionnez artifact_id dans Classification, mais la classe Classification n'a pas de propriété nommée 'artifact_id'. Pour résoudre ce problème, utilisez la propriété class de votre HQL.

SELECT artifactId FROM Classification
66
Vimm