使用 Hibernate 公式从另一个 table 中选择一个实体
Selecting an entity from another table using a Hibernate formula
我正在尝试使用 Hibernate 的 @Formula 注释从另一个 table 检索实体。给定以下代码:
@Entity
class Test {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id = null;
// ...
@Formula("(SELECT r FROM Result r WHERE test_id = id AND resultDate = (SELECT MAX(resultDate) FROM Result WHERE test_id = id))")
private Result lastestResult;
// ...
public Result getLatestResult() {
return latestResult;
}
// ...
}
结果 class 如下所示:
@Entity
class Result {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id = null;
@ManyToOne
private Test test;
// ...
}
但是在尝试加载测试实体时,出现错误 'Column "TEST0_.RESULTDATE" not found'。我还尝试了其他一些涉及 @JoinFormula 注释的事情,但没有成功。我还遇到了 this answer,这似乎表明我正在做的事情应该有效,但事实并非如此。我该怎么做?
所以,我找到了这个特定问题的解决方案。 latestResult
属性 注释如下:
@ManyToOne
@JoinColumnsOrFormulas({
@JoinColumnOrFormula(formula=@JoinFormula(value="(SELECT r.id FROM Result r WHERE resultDate = (SELECT MAX(sqr.resultDate) FROM Result sqr WHERE sqr.test_id = id))", referencedColumnName="id")),
})
private Result latestResult;
我正在尝试使用 Hibernate 的 @Formula 注释从另一个 table 检索实体。给定以下代码:
@Entity
class Test {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id = null;
// ...
@Formula("(SELECT r FROM Result r WHERE test_id = id AND resultDate = (SELECT MAX(resultDate) FROM Result WHERE test_id = id))")
private Result lastestResult;
// ...
public Result getLatestResult() {
return latestResult;
}
// ...
}
结果 class 如下所示:
@Entity
class Result {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id = null;
@ManyToOne
private Test test;
// ...
}
但是在尝试加载测试实体时,出现错误 'Column "TEST0_.RESULTDATE" not found'。我还尝试了其他一些涉及 @JoinFormula 注释的事情,但没有成功。我还遇到了 this answer,这似乎表明我正在做的事情应该有效,但事实并非如此。我该怎么做?
所以,我找到了这个特定问题的解决方案。 latestResult
属性 注释如下:
@ManyToOne
@JoinColumnsOrFormulas({
@JoinColumnOrFormula(formula=@JoinFormula(value="(SELECT r.id FROM Result r WHERE resultDate = (SELECT MAX(sqr.resultDate) FROM Result sqr WHERE sqr.test_id = id))", referencedColumnName="id")),
})
private Result latestResult;