当前位置: 首页 > 面试题库 >

在Hibernate中使用Transformers.aliasToBean填充子bean

宗政权
2023-03-14
问题内容

我接下来还有几粒豆:

Address {
    String name;
    String number;
    String zipcode;
    String town;
}

MyEntity {
    Address address;
    String value1;
    String value2;
}

我正在尝试执行下一个Hibernate查询:

private final List<String> propertiesDistinct = Arrays.asList("address.name");
private final List<String> properties = Arrays.asList("address.number",
        "address.zipcode", "address.town")

ProjectionList projectionList = Projections.projectionList();

if (propertiesDistinct != null) {
    ProjectionList projectionListDistinct = Projections.projectionList();
for (String propertyDistinct : propertiesDistinct)
         projectionListDistinct.add(Projections.property(propertyDistinct).as(propertyDistinct));

    projectionList.add(Projections.distinct(projectionListAgrupar));
}

if (properties != null)
    for (String property : properties)
         projectionList.add(Projections.property(property).as(property));
criterio.setProjection(projectionList);

// MORE FILTERS ON MyEntity FIELDS
//... criterio.add(Restrinctions...);

// I want to recover the results on my bean MyEntity so I don't have to create a new one
criterio.setResultTransformer(Transformers.aliasToBean(MyEntity.class));

问题:

Caused by: org.hibernate.PropertyNotFoundException: Could not find setter for address.name on class com.entities.MyEntity

我了解Hibernate正在寻找类似的东西:

public String getAddressName() {} // This should be in MyEntity

代替:

public String getName() {} // In my Address bean

关于如何在不创建新bean的情况下解决此问题的想法?

谢谢!


问题答案:

我写了一个ResultTransformer可以解决您的问题。它的名称是AliasToBeanNestedResultTransformer,请在github上查看。



 类似资料:
  • 问题内容: 我正在尝试通过加入实体类来创建BO 我得到100个空BO,即所有属性均为null我的BO如下 ..... 当我删除aliasToBean行并遍历Object []时,我可以看到已获取正确的值,请指导我… 问题答案: 尝试显式地对项目进行别名化,以匹配Bean中的字段名称,如下所示:

  • 我正在从事java Web项目,必须在表中插入用户记录。 需要在user表中的ID列值中添加前缀,这意味着我们必须将像“user”这样的前缀添加到序列生成的值中,以获得id列的最终值为“user00001”,这是每个新记录的主键插入表中。 我创建了一个序列和DB触发器,用于在DB中插入任何记录以满足上述要求时填充ID列。我正在使用Oracle 11g DB。 在我的Web应用程序中,我必须使用Hi

  • 问题内容: Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery( “select proj_employee.employee_no as employeeNo, … .setResultTransformer(Transformers.aliasToBean(Use

  • 对于我的web应用程序,我将从静态DB表中加载一些细节,我计划在容器在单个bean中的HolderClass上启动时加载这些静态DB表。我将在任何希望使用静态数据的地方注入这个类。所以基本上我想避免每次从DB加载静态数据 当前执行情况: 上面的实现工作得非常好,即init方法为bean加载国家列表。但是现在我已经迁移到了Hibernate,Country是一个持久实体。 Hibernate: 请注

  • /views/fornecedor/ordersearch.xhtml@34,84 value=“#{order.id}”:类“java.util.HashSet”没有属性“id”。 和:

  • 我正在使用核心数据,并试图用NSMutableSet来填充UITableView。我有两个实体,团队和球员。在我的addTeamsController上,我正在为球队保存一名球员,如下所示 在另一个viewController上,我试图用团队成员填充一个tableview。为了做到这一点,我做了如下工作 然后在我的行和索引路径单元格中,我执行以下操作 我得到了错误 我想知道填充按玩家名字排序的ta