我正在用 Java 实现一个 rest web 服务作为大学作业,所以我对这些事情很陌生,因此我可能以错误的方式做这件事。
无论如何,问题是 Dozer 无法将 Hibernate 映射PersistentBag
到java.util.List
.
我正在映射两个类:A
和B
,
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
(休眠)的方式:
@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
我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
本身。
我无法找出我做错了什么,为什么推土机可以映射A
到B
但不能映射B
到A
.
提前致谢