gpt4 book ai didi

java - 组织.hibernate.PropertyNotFoundException : Could not find setter for 0

转载 作者:搜寻专家 更新时间:2023-11-01 01:00:29 38 4
gpt4 key购买 nike

我使用 HQL 从表中仅提取选定的属性,维护非实体类对象的列表。对于例如。我的实体类:

@Entity
@Table(name="STUDENT")
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

@Column(name="NAME", columnDefinition="TEXT", length="60", nullable = false)
private String name;

@ManyToOne
@JoinColumn(name = "Dept_id", nullable = false)
private Department department;

// Other fields...
// Getter-Setters
}

非持久性 DTO 类只有更少的类成员(比如,只有名字):

public class StudentDTO {
private String name;
// Getter-Setter for name
}

正在使用

public List<StudentDTO> getStudents(Long deptId) {
List<StudentDTO> students;

Query query = session.createQuery("select student.name " +
"from Student as student " +
"where Dept_id =?").setResultTransformer(new AliasToBeanResultTransformer(StudentDTO.class));
query.setString(0, Long.toString(deptId));

students = CommonUtil.castList(StudentDTO.class, query.list());
return students;
}

其中 castList 将任何集合转换为 ArrayList。

public static <T> List<T> castList(Class<? extends T> clazz, Collection<?> c) {
List<T> resultList = new ArrayList<T>(c.size());
for(Object o: c)
resultList.add(clazz.cast(o));
return resultList;
}

抛出 org.hibernate.PropertyNotFoundException:无法在类 ../StudentDTO 上找到 0 的 setter

引用 Hibernate exception PropertyNotFoundException when using Transformer ,我将查询更改为 "select student.id as id,...",在 StudentDTO 中有 Long id 但抛出相同的异常,说找不到 1 的 setter。

每个属性都有 Getter/Setter。请提出更改建议!

最佳答案

当你使用 AliasToBeanResultTransformer , 你必须声明适当的 alias你的名字 query .类名本身表示它将把结果转换成你的 resultClass使用 alias名字。

transformTuple AliasToBeanResultTransformer的方法|类使用 alias名称以查找 resultClass (StudentDto) 的设置方法:

for (int i = 0; i < aliases.length; i++) {
String alias = aliases[i];
if(alias != null) {
setters[i] = propertyAccessor.getSetter(resultClass, alias);
}
}

为了制作AliasToBeanResultTransformer正常工作你需要在你的 query 中使用正确的别名.如果属性名称在您的 StudentDto类是 name , 你应该使用 select student.name as name .使用 select student.name as n将再次抛出异常。 alias您在 query 中使用的名称应与 DTO 类中的属性名称相同。

关于java - 组织.hibernate.PropertyNotFoundException : Could not find setter for 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18744512/

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