2

私は大学の課題としてJavaで残りのWebサービスを実装しているので、そのようなことはまったく初めてなので、おそらく間違った方法でやっています。

PersistentBagとにかく問題は、Dozer が Hibernateを にマップできないことjava.util.Listです。

私は2つのクラスをマッピングしています:AB,

List<Department> A.departments

にマッピングされます

DepartmentsType B.departments

DepartmentsTypeというプロパティが 1 つだけあります。

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;

a にマップしようとするたびに、class ADozerからclass Ba を取得します。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ん。BA

前もって感謝します

4

1 に答える 1

1

DepartmentsType何時間も検索した結果、の ( B.departments) クラスのList のセッターが見つからないことがわかりました。

そのセッターがなければ、Dozer は Hibernate からのリストをマップできませんでした。

于 2011-11-15T08:35:57.533 に答える