【问题标题】:Hibernate @JoinFormula休眠@JoinFormula
【发布时间】:2012-06-11 12:43:57
【问题描述】:

我有两个实体 A 和 B。

 public class A{

    @Id
    @GeneratedValue
    private Integer id;

    private String uuid;

    ...
  }

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; 

      ...        
}

这将在 B 中创建一个包含 A 的 id 的列,如果我尝试持久化一个对象,则会引发异常。我也尝试过@JoinColumnsOrFormulas,但没有运气。

谁能给我一个关于如何做到这一点的提示(在 Hibernate 3.5 btw 中)?

谢谢!

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    以下作品:

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

    【讨论】:

    • 是的。它被接受了。但它符合预期吗?这个怎么在这里选择最高的id?
    • ORDER BY id DESC LIMIT 1 ?
    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 2021-10-21
    • 2015-02-08
    • 2019-04-18
    • 2017-02-06
    • 2017-05-18
    • 2017-09-19
    • 2013-10-19
    相关资源
    最近更新 更多