我正面临着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:当然这是一个简化的情况,我不是很想做到这一点)
答案 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。