Hibernate @JoinFormula

Sim*_*mon 8 hibernate

我有两个实体A和B.

 public class A{

    @Id
    @GeneratedValue
    private Integer id;

    private String uuid;

    ...
  }
Run Code Online (Sandbox Code Playgroud)

UUID是外部提供的; ID可以看作是版本.

现在,我想在B中引用A,以便我将uuid存储在B中并自动选择具有相应uuid和最高id的A.

我尝试的是:

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; 

      ...        
}
Run Code Online (Sandbox Code Playgroud)

这将在B中创建一个包含A的id的列,并在我尝试持久化对象时抛出异常.我也没试过@JoinColumnsOrFormulas.

有人可以给我一个如何做到这一点的提示(在Hibernate 3.5 btw)?

谢谢!

Sim*_*mon 11

以下作品:

@ManyToOne
@JoinColumnsOrFormulas({
  @JoinColumnOrFormula(formula=@JoinFormula(value="(SELECT a.id FROM A a WHERE a.uuid = uuid)", referencedColumnName="id")),
  @JoinColumnOrFormula(column = @JoinColumn("uuidOfA", referencedColumnName="uuid"))
})
private A a;
Run Code Online (Sandbox Code Playgroud)

  • 是啊.它被接受了.但这是预期的吗?这个人如何在这里选择最高的身份? (4认同)