2010-06-22 4 views
9

Gibt es eine Möglichkeit, Hibernate mitzuteilen, dass eine Spalte in eine to_char eingeschlossen werden soll, wenn sie einer anderen Tabelle beitritt oder umgekehrt eine NUMBER in ein VARCHAR konvertiert? Ich habe eine Situation, in der ich eine Tabelle habe, die eine generische Schlüsselspalte des Typs VARCHAR enthält, die die ID einer anderen Tabelle speichert, die eine Nummer ist. Ich erhalte eine SQL-Ausnahme, wenn Hibernate das generierte SQL ausführt, das '=' verwendet, um die beiden Spalten zu vergleichen.JPA oder Hibernate - Tabellen in Spalten verschiedener Typen verknüpfen

Danke ...

P.S. Ich weiß, dass dies nicht ideal ist, aber ich bin mit dem Schema fest, so dass ich damit umgehen muss.

Antwort

13

Dies sollte möglich sein, indem Sie eine Formel in Ihrem Many-to-One verwenden. Aus dem Bereich 5.1.22. Column and formula elements (Lösung auch in diesen previous answer erwähnt):

column und formula Attribute können auch innerhalb der gleichen Eigenschaft oder Assoziationskartierung zu express, beispielsweise kombiniert werden, exotischen Bedingungen beitreten.

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

mit Anmerkungen (wenn Sie Hibernate verwenden 3.5.0-Beta-2 + finden 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; } 

Oder vielleicht überprüfen Sie die @JoinColumnsOrFormula:

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

Thank Sie so sehr .. die @ JoinColumnsOrFormula Annotation funktionierte perfekt. Sie sind ein Gentleman und ein Gelehrter. – user373614

+0

@ user373614 Gern geschehen. –

+0

Was bedeutet " 'MAILING'"? – Carlos

Verwandte Themen