Я реализую веб-сервис отдыха на Java в качестве университетского задания, поэтому я довольно новичок в таких вещах, поэтому, вероятно, я делаю это неправильно.
В любом случае, проблема в том, что 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
(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
, я получаю Field Mapping Error
от Dozer:
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
.
Заранее спасибо