我想在休眠中执行以下sql:
SELECT emp.*, utilsPkg.getEmployeeDisplayName(emp.id) FROM employee emp;
到目前为止一切都很好......问题是 - 我需要将它提取到一个实体 - 所以我可以更新员工。当然,pl\sql 函数不可更新,也不属于实际表...
如何在休眠中生成这样的实体 - 具有计算且不可更新的字段?
非常感谢!
使用@Formula
注释,如Hibernate 文档中所述:
有时,您希望数据库为您而不是在 JVM 中进行一些计算,您还可以创建某种虚拟列。您可以使用 SQL 片段(又名公式)而不是将属性映射到列。这种属性是只读的(其值由您的公式片段计算)。
我不确定我是否完全理解您的问题,但您始终可以使用Hibernate 实体生命周期回调,或者您可以直接在查询中提供它:
select new MyEntity(o.column1, o.column2, utilsPkg.getEmployeeDisplayName(o.id)) from MyEntity as o where o.id = 5
当然,您必须实现适当的构造函数。
使用该@Transient
属性的 getter 方法上的注释。