2012-06-11 15 views
6

Ho due entità A e B.Sospensione @JoinFormula

public class A{ 

    @Id 
    @GeneratedValue 
    private Integer id; 

    private String uuid; 

    ... 
    } 

L'UUID è dato esternamente; ID può essere visto come versione.

Ora, mi piacerebbe fare riferimento a A in B tale che io abbia l'uuid memorizzato in B e selezioni automaticamente l'A con la uuid e l'id più alto.

Quello che ho cercato è:

public class B{ 
     @Id 
     @GeneratedValue 
     private Integer id; 

     private String uuidOfA; 

     @ManyToOne 
     @JoinFormula(value="SELECT a.id FROM A a WHERE v.uuid = uuidOfA AND v.id = (SELECT max(x.id) FROM A x WHERE x.uuid = v.uuid)", referencedColumnName="id") 
     private A a; 

     ...   
} 

Questo creerà una colonna contenente id di A in B e genera un'eccezione se provo a persistere un oggetto. Ho anche provato @JoinColumnsOrFormulas senza fortuna.

Qualcuno può darmi un suggerimento su come farlo (in Hibernate 3.5 btw)?

Grazie!

risposta

9

le seguenti opere:

@ManyToOne 
@JoinColumnsOrFormulas({ 
    @JoinColumnOrFormula([email protected](value="(SELECT a.id FROM A a WHERE a.uuid = uuid)", referencedColumnName="id")), 
    @JoinColumnOrFormula(column = @JoinColumn("uuidOfA", referencedColumnName="uuid")) 
}) 
private A a; 
+0

accetto così la gente può vedere che questo funziona. – ssedano

+3

Sì. È accettato Ma cosa si aspetta? Come questo qui sceglie il più alto id? –

Problemi correlati