我想用 hql(不是 sql!)覆盖 select 子句中的实体列,而不枚举所有列。我不会把我的实体放在这里,因为它们很复杂。相反,我通过一个简单的例子来简化这个问题。
考虑我有一个 CarEntity:
public CarEntity{
private Long id;
private Integer color;
private Long Date;
//...
//getters and setters
}
要获得所有汽车,我执行以下 hql 请求:
String query = "select c from CarEntity c";
现在,我想在 hql 的 select 子句中将 Date 值替换为 0。我怎样才能做到这一点?
我知道我不感兴趣的 3 种可能性,因为我的实体有很多列:
1)java(不是一个好的解决方案):
String hql = "select c from CarEntity c";
List<CarEntity> list = session.createQuery(hql).list();
session.close();
for (CarEntity car: list)
car.setDate(0);
2) sql:
String sql = "select id, 0 as date from car";
List<CarEntity> list = session.createSQLQuery(sql)
.addScalar("id",LongType.INSTANCE)
.addScalar("date",LongType.INSTANCE)
.setResultTransformer(Transformers.aliasToBean(CarEntity.class))
.list();
3) hql(在 select 子句中使用 new CarEntity):
String hql = "select new CarEntity(c.id,0) from CarEntity c";
当然,在最新的情况下,我必须在 CarEntity 中添加一个新的合适的构造函数。
非常感谢。