![](/img/trans.png)
[英]Hibernate OneToMany relation is PersistentBag instead of List
[英]Dozer can't map Hibernate's persistentBag to List
我正在用Java作為大學作業來實現其余的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
, 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
映射到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
映射到class A
一切都會按預期進行。 我知道,出於多種原因,Hibernate正在將我定義為List
轉換為其PersistentBag
但這應該是List
本身。
我無法找出我在做什么,為什么推土機可以將A
映射到B
而不是B
映射到A
提前致謝
經過數小時的搜索,我發現我在DepartmentsType
的( B.departments
)類上缺少列表的設置器。
沒有該設置程序,Dozer無法映射來自Hibernate的列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.