有没有办法在休眠中选择额外的字段 - 不保存?

时间:2012-06-04 21:14:07

标签: java hibernate jpa

我想在hibernate中执行以下sql:

SELECT emp.*, utilsPkg.getEmployeeDisplayName(emp.id) FROM employee emp;

到目前为止一直很好...... 问题是 - 我需要将它提取到实体 - 所以我可以更新员工。 当然,pl \ sql函数不可更新,也不是实际表的一部分...

如何在hibernate中生成这样的实体 - 使用计算且不可更新的字段?

非常感谢!

3 个答案:

答案 0 :(得分:1)

使用@Formula注释,如Hibernate documentation

中所述
  

有时,您希望数据库为您做一些计算   与JVM相比,您可能还会创建某种虚拟列。   您可以使用SQL片段(也称为公式)而不是映射属性   进入专栏。这种属性是只读的(它的值是   由公式片段计算得出。)

答案 1 :(得分:0)

对该属性的getter方法使用@Transient注释。

答案 2 :(得分:0)

我不确定我是否完全理解您的问题,但您可以随时使用Hibernate entity lifecycle callbacks,也可以直接在查询中提供:

select new MyEntity(o.column1, o.column2, utilsPkg.getEmployeeDisplayName(o.id)) from MyEntity as o where o.id = 5

当然,您必须实现适当的构造函数。