2009-05-18 5 views
1

I ont une structure de hiérarchie de classes assez simple qui figure ci-dessous, chaque classe ayant un type sous énumération @DiscriminatorValue, qui fonctionne très bien.problèmes de mapping Hibernate et l'héritage avec @SecondaryTable

classe Résumé:

AbstractNode (classe abstraite mappée sur la table Node)

classes subclassed:

FieldNode (classe simple correspondance avec la table Node ainsi , mais avec une valeur différente de @DiscriminatorValue)

SynonymNode (classe de problèmes, cette classe cartes également à la table de nœud avec une autre valeur @DiscriminatorValue)

mais AUSSI a un attribut @SecondaryTable et a des colonnes supplémentaires, telles que deletedDate, CreatedDate, etc. .. chacun qui correspond à coumns dans la table définie dans l'attribut @SecondaryTable.

Im question vient quand je fais une simple requête de mise en veille prolongée pour cette table Node

Je reçois des erreurs comme:

org.hibernate.exception.GenericJDBCException: Impossible d'exécuter la requête ... trace de la pile ... causée par: java.sql.SQLException: nom de colonne non valide

et dans mes journaux, je peux voir:

Hib ernate: Sélectionnez * de vocab_node où inférieur (nom) comme '%' || ? || '%'

INFO [NullableType.java:132]: impossible de lire la valeur de la colonne de jeu de résultats: DELETED_DATE; Nom de colonne non valide

Je pense qu'il trouve une ligne dans le tableau DB, identifie alors c'est un SynonymNode type de classe (par la colonne @DiscriminatorValue) essaie ensuite de remplir la classe, y compris la table supplémentaire de colonnes mises en correspondance avec le @SecondaryTable.

Comment puis-je dire à deux, à gauche se joindre à la @SecondaryTable, ou l'exclure tout à fait pour cette requête particulière?

Merci beaucoup! Ce problème me tue!

Im en cours d'exécution Hibernate 3.2.1 et Java 1.5

Cheers, Mark

+0

Je dois mentionner que jusqu'à présent mon travail consiste à rejoindre à gauche le @SecondaryTable dans mon SQL afin qu'au moins les valeurs null soient retournées et les mappages sont toujours corrects ... – Mark

Répondre

2

Je crois que le problème est que vous devez spécifier les champs que vous mappez à votre @SecondaryTable ...

Dans l'annotation @Column définir la "table" attribut: @Column (name = "somecol", table = "SecondaryTable")

Hibernate se plaint parce qu'il est à la recherche de vos champs dans la table d'origine lorsque il devrait être à leur recherche dans la table secondaire.