Man*_*gra 5 java orm hibernate
我有一张这样的桌子:
id | name | score
Run Code Online (Sandbox Code Playgroud)
使用Hibernate通过XML映射到POJO.分数列我只需要oder byHQL中的in 子句.score列的值由算法计算,并通过SQL批处理(JDBC)每24小时更新一次.所以我不想用我在运行时不需要的属性来污染我的POJO.
对于可能不是问题的单个列,但我有几个不同的分数列.有没有办法只为HQL使用映射属性?
例如这样:
<property name="score" type="double" ignore="true"/>
Run Code Online (Sandbox Code Playgroud)
所以我仍然可以这样做:
from Pojo p order by p.score
Run Code Online (Sandbox Code Playgroud)
但我的POJO实现可能如下所示:
public class Pojo
{
private long id;
private String name;
// ...
}
Run Code Online (Sandbox Code Playgroud)
没有为score实现添加提供或属性的Setter .
使用最新的Hibernate版本的Java.
更新:
在完美的世界中,它可以这样做(感谢Pascal Thivent):
<property name="score" access="noop" insert="false" update="false"/>
Run Code Online (Sandbox Code Playgroud)
您可以access="noop"在映射中使用来指定仅查询属性(这是一个秘密的、未记录的功能,请参阅HHH-552):
<property name="score" access="noop" insert="false" update="false" ... />
Run Code Online (Sandbox Code Playgroud)
更新:只是为了澄清,使用以下实体:
public class EntityWithHqlOnlyProperty implements Serializable {
private Long id;
private String name;
//...
}
Run Code Online (Sandbox Code Playgroud)
这个映射:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.stackoverflow.q2812672.EntityWithHqlOnlyProperty" table="EntityWithHqlOnlyProperty">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="assigned" />
</id>
<property name="name" type="string">
<column name="name" not-null="true" />
</property>
<property name="score" type="double" access="noop" insert="false" update="false"/>
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
以下片段:
Query q = session.createQuery("from EntityWithHqlOnlyProperty e order by e.score");
List<EntityWithHqlOnlyProperty> resultList = q.list();
assertNotNull(resultList);
Run Code Online (Sandbox Code Playgroud)
生成以下 SQL:
select
entitywith0_.id as id6_,
entitywith0_.name as name6_,
entitywith0_.score as score6_
from
EntityWithHqlOnlyProperty entitywith0_
order by
entitywith0_.score
Run Code Online (Sandbox Code Playgroud)
在我的现实世界中,测试刚刚通过。这已经在 Derby 和 HSQLDB 上使用 Hibernate Core 3.3.2.GA 进行了测试。换句话说,它可以在我的机器(c)上运行。
如果它不适合你 - 我无意粗鲁,但在完美的世界中,你应该提供一个测试用例,允许按照要求重现HHH-2925 3 年以上。提供一种重现问题的方法(我不能)可以大大增加解决问题的机会。