2012-06-11 6 views
6

У меня есть два объекта А и В.Спящий @JoinFormula

public class A{ 

    @Id 
    @GeneratedValue 
    private Integer id; 

    private String uuid; 

    ... 
    } 

Использование UUID дается извне; ID можно рассматривать как версию.

Теперь я хотел бы ссылаться на A в B, чтобы у меня был uuid, сохраненный в B, и автоматически выбирал A с соответствующим uuid и самым высоким id.

То, что я попытался это:

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; 

     ...   
} 

Это создаст столбец, содержащий идентификатор элементов а в B и генерирует исключение при попытке сохранить объект. Я также попробовал @JoinColumnsOrFormulas без везения.

Может ли кто-нибудь дать мне подсказку о том, как это сделать (в Hibernate 3.5 btw)?

Спасибо!

ответ

9

следующие работы:

@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

Примите это, чтобы люди могли видеть, что это работает. – ssedano

+3

Да. Это принято. Но как это ожидалось? Как этот человек выбирает самый высокий идентификатор здесь? –

Смежные вопросы