すべての列を列挙せずに、select 句のエンティティの列を (sql ではなく) hql でオーバーライドしたいと思います。エンティティは複雑なので、ここには記載しません。代わりに、簡単な例で質問を単純化します。
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 句での新しい CarEntity の使用) :
String hql = "select new CarEntity(c.id,0) from CarEntity c";
もちろん、最新のケースでは、CarEntity に新しい適切なコンストラクターを追加する必要があります。
どうもありがとう。