2014-09-24 60 views
2

使用地圖的ID我有兩個休眠實體:休眠+推土機 - 上映射集合項屬性

@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... 
} 

和兩個DTO實體:

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... 
} 

而且我已經得到了以下推土機映射:

<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> 

問題是,當我使用「partnerWithCollections」映射調用推土機時,推土機會映射所有Visit對象如果每次訪問的訪問者屬性只應包含partnerNumber,則每次訪問都有它的訪問者訪問集合等等。

如果我嘗試從訪問中排除訪問者字段,然後工作,並且每個訪問者的訪問都爲空,但出於某種原因,它無法使用map-id來使用某些具體的合作伙伴映射。

任何想法?

在此先感謝。

回答

0

這是因爲在默認情況下,推土機始終映射具有相同名稱的屬性:

  • Partner.visits
  • PartnerDto.visits

您可以禁用此設置<映射>屬性附加傷害「通配符=假」。

從德公報文檔:

不推土機自動映射相匹配的屬性名稱字段?

是的。所有具有匹配屬性名稱的字段都是隱式映射的。這將是非典型用法,但您可以通過設置wilcard =「false」來抑制此行爲。

http://dozer.sourceforge.net/documentation/faq.html#auto-property-name

你也可以這樣對待所有的映射,使用全局配置:

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

http://dozer.sourceforge.net/documentation/globalConfiguration.html