2010-12-08 31 views
4

Est-ce que ce travail -mapping Hibernate @OneToOne avec une clause @Where

@OneToOne() 
@JoinColumn(name = "id", referencedColumnName = "type_id") 
@Where(clause = "type_name = OBJECTIVE") 
public NoteEntity getObjectiveNote() { 
    return objectiveNote; 
} 

C'est ce que je suis en train de faire - obtenir le record de la table note dont type_id est le id de l'objet courant et type_name est OBJECTIVE.

Je n'arrive pas à faire fonctionner le mappage ci-dessus. Qu'est-ce que je fais mal ici?

+0

"OBJECTIF" est-ce une constante ou un attribut? –

+0

Vous devez afficher 'NoteEntity'. Aussi, essayez de configurer ' true' afin de voir ce qu'il y a dans le SQL. –

Répondre

5

Ce travail juste ne simplement pas, désolé :(Vous devez le faire comme un à plusieurs et vivre à obtenir une collection avec un seul élément.

Si vous voulez vraiment que cela fonctionne de cette façon, vous peut duper mise en veille prolongée en stockant à la fois l'ID clé étrangère et la nom_type dans une table de jointure et lui disant que les deux colonnes constituent la clé étrangère.

+1

Ok, comment? Option 2 –

0

en fait, vous pouvez réaliser ceci en spécifiant @OneToOne sans @Where, mais mettre @Where sur la Je l'ai testé sur Hibernate 4.3.11

Cela fonctionne si vous ne vous souciez pas des objets d'entité qui ne correspondent pas à votre @Where.

Si vous ne se soucient d'autres entités, vous pouvez probablement créer une entité de sous-classe, mettre @Where sur elle et se joindre à cette sous-classe. Mais je n'ai pas testé ce scénario.