Hibernate - 现场操作

时间:2013-12-03 15:43:27

标签: java hibernate hql


我正面临着Hibernate的一个小问题。 我有一节课:

public class Clazz{
   private int idClazz;
   //getters & setters...
}

它在Hibernate中正确映射。 我想在数据库中选择此类的所有行,但我希望idClazz字段为100 *数据库中的ID。

所以我做了一个小的HQL查询:

daoObject.createQuery("select 100*idClazz as idClazz from Clazz");

当我从此查询中打印对象列表时,我仍然可以获得“正常”ID。 我做错了什么?

感谢您的帮助!
(ps:当然这是一个简化的情况,我不是很想做到这一点)

2 个答案:

答案 0 :(得分:1)

我不知道如何更改查询中ID列的值,你可能最终会坚持回来,我必须运行测试才能看到。

对我来说,在加载时计算一个瞬态场会更安全,如下所示:

@Transient
private int IDMulled;

@PostLoad
public void onPostLoad() {
    this.IDMulled = idClazz * 100;
}

或者,因为我不认为你想做什么在JPQL中是合法的,你可以这样做一个本机SQL查询:

session.createSQLQuery("Select (idClazz * 100) as result From Clazz");

答案 1 :(得分:0)

根据上下文有两种不同含义的字段不是一个好主意。它违反了最不惊讶的原则,只会让其他开发人员甚至自己感到困惑。

因此,请使用WPrecht建议的@Formula注释或@Transient方法。如果额外的int字段的额外4个字节杀死了你,那么你不应该使用Hibernate。