2010-06-22 4 views
9

Existe-t-il un moyen de dire à Hibernate d'enrouler une colonne dans un tochar en l'utilisant pour rejoindre une autre table ou inversement convertir un nombre en un VARCHAR? J'ai une situation où j'ai une table qui contient une colonne de clé générique de type VARCHAR qui stocke l'ID d'une autre table qui est un nombre. J'obtiens une exception SQL quand Hibernate exécute le SQL qu'il génère et utilise '=' pour comparer les deux colonnes.JPA ou Hibernate - Assembler des tables sur des colonnes de différents types

Merci ...

P.S. Je sais que ce n'est pas idéal, mais je suis coincé avec le schéma, donc je dois faire avec.

Répondre

13

Cela devrait être possible en utilisant une formule dans votre plusieurs-à-un. De section 5.1.22. Column and formula elements (solution également mentionné dans ce previous answer):

column et formula attributs peuvent être même combinés dans le même propriété ou mapping association express, par exemple, exotique rejoindre conditions.

<many-to-one name="homeAddress" class="Address" 
     insert="false" update="false"> 
    <column name="person_id" not-null="true" length="10"/> 
    <formula>'MAILING'</formula> 
</many-to-one> 

avec annotations (si vous utilisez Hibernate 3.5.0-Beta-2 +, voir HHH-4382):

@ManyToOne 
@Formula(value="(select v_pipe_offerprice.offerprice_fk from v_pipe_offerprice where v_pipe_offerprice.id = id)") 
public OfferPrice getOfferPrice() { return offerPrice; } 

Ou peut-être vérifier le @JoinColumnsOrFormula:

@ManyToOne 
@JoinColumnsOrFormulas(
{ @JoinColumnOrFormula([email protected](value="SUBSTR(product_idnf, 1, 3)", referencedColumnName="product_idnf")) }) 
@Fetch(FetchMode.JOIN) 
private Product productFamily; 
+2

Remerciez vous beaucoup .. l'annotation @JoinColumnsOrFormula a parfaitement fonctionné. Vous, Monsieur, êtes un gentleman et un savant. – user373614

+0

@ user373614 De rien. –

+0

Qu'est-ce que cela signifie " 'MAILING'"? – Carlos