Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法在hibernate中选择不保存的额外字段?_Java_Hibernate_Jpa - Fatal编程技术网

Java 有没有办法在hibernate中选择不保存的额外字段?

Java 有没有办法在hibernate中选择不保存的额外字段?,java,hibernate,jpa,Java,Hibernate,Jpa,我想在hibernate中执行以下sql: SELECT emp.*, utilsPkg.getEmployeeDisplayName(emp.id) FROM employee emp; 到目前为止还不错。。。 问题是-我需要它被提取到一个实体-这样我就可以更新员工。 当然,pl\sql函数既不可更新,也不是实际表的一部分 我如何在hibernate中生成这样一个实体,其中包含一个已计算且不可更新的字段 非常感谢 对该属性使用getter方法上的@Transient注释。使用@Formula

我想在hibernate中执行以下sql:

SELECT emp.*, utilsPkg.getEmployeeDisplayName(emp.id) FROM employee emp;
到目前为止还不错。。。 问题是-我需要它被提取到一个实体-这样我就可以更新员工。 当然,pl\sql函数既不可更新,也不是实际表的一部分

我如何在hibernate中生成这样一个实体,其中包含一个已计算且不可更新的字段


非常感谢

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

使用
@Formula
注释,如中所述:

有时,您希望数据库为您执行一些计算,而不是 与在JVM中相比,您还可以创建某种虚拟列。 您可以使用SQL片段(也称为公式)而不是映射属性 排成一列。此类属性为只读(其值为 由您的公式片段计算)


我不确定我是否完全理解您的问题,但您可以始终使用或直接在查询中提供:

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

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

这是无效的HQL。并且它不会返回附加的实体。看看我的答案,了解OP想要什么,以及如何做。嗯。。。我只是从生产代码复制粘贴了这个HQL查询,它就可以工作了。你能告诉我什么是无效的吗?如果它有效,那么它一定是有效的,我会改正的。我猜utilsPkg.get…()函数调用是按照生成的SQL中的方式传递的。不知道可以在HQL中调用这样的任意SQL函数。但它仍然不会返回附加的实体。