Java 冬眠+;推土机-在映射的集合项属性上使用映射id

Java 冬眠+;推土机-在映射的集合项属性上使用映射id,java,hibernate,dozer,Java,Hibernate,Dozer,我有两个hibernate实体: @Entity @Table(name = DBConstants.TABLE_PARTNER) public class Partner extends XWeedEntity { private static final long serialVersionUID = 5692151244956513381L; @Id @Column(name = DBConstants.PARTNER_COL_PARTNER_NUMBER)

我有两个hibernate实体:

@Entity
@Table(name = DBConstants.TABLE_PARTNER)
public class Partner extends XWeedEntity {

    private static final long serialVersionUID = 5692151244956513381L;

    @Id
    @Column(name = DBConstants.PARTNER_COL_PARTNER_NUMBER)
    private Integer partnerNumber;

    @OneToMany(mappedBy = DBConstants.VISIT_PROP_VISITOR)
    private List<Visit> visits;

    // More fields and properties...
}


@Entity
@Table(name = DBConstants.TABLE_VISIT)
public class Visit extends XWeedEntity {

    private static final long serialVersionUID = -8324746049334117579L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = DBConstants.VISIT_COL_ID)
    private Integer id;

    @ManyToOne
    @JoinColumn(name = DBConstants.VISIT_COL_VISITOR, nullable = false)
    private Partner visitor;

    // More fields and properties...
}
public class PartnerDto extends XWeedEntity {

    private static final long serialVersionUID = 5692151244956513381L;
    private Integer partnerNumber;
    private List<VisitDto> visits;

    // More fields and properties...
}


public class VisitDto extends XWeedEntity {

    private static final long serialVersionUID = -8324746049334117579L;
    private Integer id;
    private PartnerDto visitor;

    // More fields and properties...
}
@实体
@表(name=DBConstants.Table\u PARTNER)
公共类合作伙伴扩展XweeEntity{
私有静态最终长serialVersionUID=5692151244956513381L;
@身份证
@列(名称=DBConstants.PARTNER\u COL\u PARTNER\u编号)
私有整数;
@OneToMany(mappedBy=DBConstants.VISIT\u PROP\u VISITOR)
私人名单访问;
//更多字段和属性。。。
}
@实体
@表(name=DBConstants.Table\u访问)
公开课堂参观延长了学生的学习时间{
私有静态最终长serialVersionUID=-832474604933417579L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(名称=DBConstants.VISIT\u COL\u ID)
私有整数id;
@许多酮
@JoinColumn(name=DBConstants.VISIT\u COL\u VISITOR,null=false)
私人伙伴访客;
//更多字段和属性。。。
}
和两个DTO实体:

@Entity
@Table(name = DBConstants.TABLE_PARTNER)
public class Partner extends XWeedEntity {

    private static final long serialVersionUID = 5692151244956513381L;

    @Id
    @Column(name = DBConstants.PARTNER_COL_PARTNER_NUMBER)
    private Integer partnerNumber;

    @OneToMany(mappedBy = DBConstants.VISIT_PROP_VISITOR)
    private List<Visit> visits;

    // More fields and properties...
}


@Entity
@Table(name = DBConstants.TABLE_VISIT)
public class Visit extends XWeedEntity {

    private static final long serialVersionUID = -8324746049334117579L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = DBConstants.VISIT_COL_ID)
    private Integer id;

    @ManyToOne
    @JoinColumn(name = DBConstants.VISIT_COL_VISITOR, nullable = false)
    private Partner visitor;

    // More fields and properties...
}
public class PartnerDto extends XWeedEntity {

    private static final long serialVersionUID = 5692151244956513381L;
    private Integer partnerNumber;
    private List<VisitDto> visits;

    // More fields and properties...
}


public class VisitDto extends XWeedEntity {

    private static final long serialVersionUID = -8324746049334117579L;
    private Integer id;
    private PartnerDto visitor;

    // More fields and properties...
}
public class PartnerDto扩展XWeedEntity{
私有静态最终长serialVersionUID=5692151244956513381L;
私有整数;
私人名单访问;
//更多字段和属性。。。
}
公共类访问扩展了XWeedEntity{
私有静态最终长serialVersionUID=-832474604933417579L;
私有整数id;
访客私人伙伴;
//更多字段和属性。。。
}
我得到了以下推土机映射:

<mapping map-id="partnerWithCollections" map-empty-string="false" map-null="false">
    <class-a>org.xweed.model.app.domain.dbo.Partner</class-a>
    <class-b>org.xweed.model.app.domain.dto.PartnerDto</class-b>

    <field map-id="visitWithPartner">
        <a>visits</a>
        <b>visits</b>
    </field>
</mapping>

<mapping map-id="partnerBasic" wildcard="false" map-empty-string="false" map-null="false">
    <class-a>org.xweed.model.app.domain.dbo.Partner</class-a>
    <class-b>org.xweed.model.app.domain.dto.PartnerDto</class-b>

    <field>
        <a>partnerNumber</a>
        <b>partnerNumber</b>
    </field>
</mapping>

<mapping map-id="visitWithPartner" map-empty-string="false" map-null="false">
    <class-a>org.xweed.model.app.domain.dbo.Visit</class-a>
    <class-b>org.xweed.model.app.domain.dto.VisitDto</class-b>

    <field map-id="partnerBasic">
        <a>visitor</a>
        <b>visitor</b>
    </field>
</mapping>

org.xweed.model.app.domain.dbo.Partner
org.xweed.model.app.domain.dto.PartnerDto
拜访
拜访
org.xweed.model.app.domain.dbo.Partner
org.xweed.model.app.domain.dto.PartnerDto
合伙人编号
合伙人编号
org.xweed.model.app.domain.dbo.Visit
org.xweed.model.app.domain.dto.VisitDto
游客
游客
问题是,当我使用“partnerWithCollections”映射调用dozer时,dozer正在映射来自合作伙伴访问的所有访问对象,但每次访问都有它的访问者和它的访问集合,以此类推,每次访问的访问者属性应该只包含partnerNumber

若我试图从访问中排除visitor字段,那个么它会起作用,并且每个访问者的访问都是空的,但由于某种原因,使用map id来使用一些具体的合作伙伴映射是不起作用的

有什么想法吗


提前感谢。

这是因为默认情况下,推土机始终使用相同的名称映射属性:

  • 合作伙伴访问
  • 伙伴访问
您可以使用atribute“wildcard=false”禁用此设置

从官方文件:

推土机是否自动映射具有匹配属性名称的字段?

对。具有匹配属性名称的所有字段都隐式映射。这是一种非典型用法,但您可以通过设置wilcard=“false”来抑制这种行为

您还可以使用全局配置对所有映射执行此操作:

<configuration>
    <wildcard>false</wildcard>
</configuration>

假的