在@Formula
注释中只允许使用常见的 SQL 代码。当 Hibernate 查询数据库时,公式将作为子选择插入。公式的值中不允许有 HQL 或 Java 代码。
从休眠文档:
您可以使用 SQL 片段(又名公式)而不是将属性映射到列。
假设我们有一个 getter 注释:
@Formula("(SELECT COUNT(*) from t_child c WHERE c.parent_id = parent_id)")
public int getChildCount() {
return childCount;
}
然后 Hibernate 会生成这个查询:
SELECT this_.parent_id AS parent1_0_1_,
this_.name_ AS name2_0_1_,
-- Block start
(SELECT COUNT(*)
FROM t_child c
WHERE c.parent_id = this_.parent_id) AS formula0_1_,
-- Block end
tchild1_.parent_id AS parent3_3_,
tchild1_.child_id AS child1_3_,
tchild1_.child_id AS child1_1_0_,
tchild1_.parent_id AS parent3_1_0_,
tchild1_.name_ AS name2_1_0_
FROM test.t_parent this_
LEFT OUTER JOIN test.t_child tchild1_
ON this_.parent_id = tchild1_.parent_id
WHERE this_.parent_id =?
我试图突出显示由于@Formula
注释而创建的块。希望这有助于理解 Hibernate 公式的工作原理以及公式的预期格式。