【问题标题】:Dozer can't map Hibernate's persistentBag to ListDozer 无法将 Hibernate 的 persistentBag 映射到 List
【发布时间】:2011-11-12 19:19:42
【问题描述】:

我正在用 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(休眠)的方式:

@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

提前致谢

【问题讨论】:

    标签: java hibernate mapping dozer


    【解决方案1】:

    经过数小时的搜索,我发现我缺少 DepartmentsType 的 (B.departments) 类上的列表设置器。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 2019-11-23
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      相关资源
      最近更新 更多