gpt4 book ai didi

hibernate - AliasToBeanResultTransformer(MyDTO.class)无法实例化MyDTO

转载 作者:行者123 更新时间:2023-12-03 14:14:04 27 4
gpt4 key购买 nike

我想要一个Criteria查询来使用AliasToBeanResultTransformer实例化DTO类。目的是生成带有ID的轻量级分页列表,以便对主页进行进一步操作。这需要报告类型查询。

            Criteria crit = session.createCriteria(Profile.class);

crit.createAlias("personalData", "pd");
crit.createAlias("emails", "e");
crit.createAlias("telephones", "t");

ProjectionList properties = Projections.projectionList();
properties.add(Projections.property("id").as( "id"));
properties.add(Projections.property("pd.lastName").as("lastName"));
properties.add(Projections.property("pd.fullName").as("fullName"));
properties.add(Projections.property("e.emailAddress").as("email"));
properties.add(Projections.property("t.phoneNumber").as("phone"));

crit.setProjection(properties);

crit.setResultTransformer(new AliasToBeanResultTransformer(ProfileDTO.class));
profiles = crit.list();

这无法实例化我的DTO类。 ProfileDTO具有匹配的构造函数:
public ProfileDTO(Long id, String lastName, String fullName, String email,
String phone) {
this(id,fullName);
this.lastName = lastName;
this.email = email;
this.phone = phone;
}

当我用结果行手动构造ProfileDTO对象时,查询有效
        List<Object[]> rows = crit.list();

for ( Object[] row: rows ) {
ProfileDTO dto = new ProfileDTO();
dto.setId((Long)row[0]);
dto.setLastName((String)row[1]);
dto.setFullName((String)row[2]);
dto.setEmail((String)row[3]);
dto.setPhone((String)row[4]);
profiles.add(dto);
}

我的解决方法工作正常,但似乎没有必要。我究竟做错了什么?

最佳答案

AliasToBeanResultTransformer使用 setter 填充DTO。如果要使用构造函数来创建bean实例,则需要使用AliasToBeanConstructorResultTransformer

您的DTO似乎对元组的所有元素都有 setter ,除了lastName之外。也许这就是问题所在。

也就是说,您的代码非常简单,易于维护和可重构。使用AliasToBeanResultTransformer无法将其重构。我通常喜欢像您一样自己实例化我的DTO。

关于hibernate - AliasToBeanResultTransformer(MyDTO.class)无法实例化MyDTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605821/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com