【问题标题】:Hibernate criteria: dto as entityHibernate 标准:dto 作为实体
【发布时间】:2013-07-31 15:56:21
【问题描述】:

我有一个使用 Hibernate Criteria 构建的查询(我只向您展示“主要”部分):

Criteria criteria = sessionProvider.get().createCriteria(User.class);
// Add other stuff to the query like joins, group-bys, order-bys etc.
// In the projection list add the "id" of the user.
projectionList.add(Projections.property("id"), "id");
// finally using same entity class User as dto
criteria.setResultTransformer(Transformers.aliasToBean(User.class));

所以我终于可以做到了:

List<User> users = criteria.list();

当我尝试从该实体加载值时出现问题。例如:

users.get(0).getFirstName();

返回空值。因此,基本上由 Transformers.aliasToBean 创建的“dtos”之类的实体仅通过投影接收到“id”,它们不能像 get/load/etc 加载的普通实体那样工作。

有没有办法让这些 dto 作为实体“工作”?

【问题讨论】:

  • 不要设置ProjectionResultTransformersessionProvider.get().createCriteria(User.class).list()
  • 如果我不使用它们,它会返回一个 Object[],其值与关联的 groupbys 相关。
  • 在这种情况下,我认为您需要在上面发布更多查询,以便我们可以计算出它实际返回的内容......

标签: java hibernate criteria


【解决方案1】:

好像在projectionList中传递参数是错误的,你需要像这样修改projectionList。

Criteria criteria = sessionProvider.get().createCriteria(User.class);
//Add other stuff to the query like joins, group-bys, order-bys etc.

//In the projection list add the columns name which are mapped with the entity
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("id"));
projectionList.add(Projections.property("firstName"));
criteria.setProjection(projectionList);

List<User> results = criteria.list();

//output results
for(User user : results) {
    user.getFirstName();        
}

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 2021-04-20
    • 1970-01-01
    • 2014-08-20
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多