gpt4 book ai didi

java - Dozer 无法将 Hibernate 的 persistentBag 映射到 List

转载 作者:行者123 更新时间:2023-11-30 11:50:11 47 4
gpt4 key购买 nike

作为大学作业,我正在用 Java 实现一个 rest web 服务,所以我对这些东西很陌生,因此我可能以错误的方式做这件事。

无论如何,问题在于 Dozer 无法将 Hibernate PersistentBag 映射到 java.util.List

我正在映射两个类:AB

List<Department> A.departments

映射到

DepartmentsType B.departments

DepartmentsType 只有一个属性是

List<DepartmentType> departments

所以最后 A.departments 被映射到 B.departments.departments,实际上是这样的映射:

<mapping>
<class-a>it.unitn.lsde.persistence.A</class-a>
<class-b>it.unitn.lsde.generated.B</class-b>

<field>
<a>name</a>
<b>name</b>
</field>
<field>
<a>city</a>
<b>city</b>
</field>
<field>
<a>departments</a>
<b>departments.departments</b>
<a-hint>it.unitn.lsde.persistence.Department</a-hint>
<b-hint>it.unitn.lsde.generated.DepartmentType</b-hint>
</field>
<field>
<a>code</a>
<b>code</b>
</field>
</mapping>

这就是我定义 A.departments (Hibernate) 的方式:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "university", cascade = CascadeType.ALL)
protected List<Department> departments = new ArrayList<Department>();

这就是我定义 B.departments 的方式:

DepartmentsType departments;

最终这就是 DepartmentsType.departmens 的定义方式:

List<DepartmentType> departments;

每当我尝试将 class A 映射到 class B 时,我都会收到来自 Dozer 的 Field Mapping Error:

Source parent class: B
Source field name: departments
Source field type: class org.hibernate.collection.PersistentBag
Source field value: [it.unitn.lsde.persistence.Department@12b3c6b]
Dest parent class: A
Dest field name: departments.department
Dest field type: java.util.List

异常堆栈指出这段代码有问题:

return (B) mapper.map((A)session.get(A.class, id), B.class);

然而,当我将 class B 映射到 class A 时,一切都按预期进行。我知道,出于多种原因,Hibernate 正在将我定义为 List 的内容转换为它的 PersistentBag 但这应该是一个 List 本身。

我无法找出我做错了什么,为什么 Dozer 可以将 A 映射到 B 但不能将 B 映射到A

提前致谢

最佳答案

经过几个小时的搜索,我发现我在 DepartmentsType 的 (B.departments) 类中缺少 List 的 setter。

没有那个 setter,Dozer 就无法映射来自 Hibernate 的列表。

关于java - Dozer 无法将 Hibernate 的 persistentBag 映射到 List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8106921/

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