2012-06-11 16 views
6

Tengo dos entidades A y B.Hibernate @JoinFormula

public class A{ 

    @Id 
    @GeneratedValue 
    private Integer id; 

    private String uuid; 

    ... 
    } 

se da externamente El UUID; ID se puede ver como versión.

Ahora, me gustaría hacer referencia a A en B de tal manera que tengo el uuid almacenado en B y selecciono automáticamente el A con el uuid correspondiente y el ID más alto.

Lo que intenté es:

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; 

     ...   
} 

Esto creará una columna que contiene el id de A en B y produce una excepción si trato de persistir un objeto. También probé @JoinColumnsOrFormulas sin suerte.

¿Alguien me puede dar una pista sobre cómo hacer esto (en Hibernate 3.5 btw)?

Gracias!

Respuesta

9

las siguientes obras:

@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

aceptarlo por lo que la gente puede ver que esto funciona. – ssedano

+3

Sí. Es aceptado Pero, ¿es lo que esperaba? ¿Cómo este elige el ID más alto aquí? –