2014-09-24 1 views
2

У меня есть два Hibernate сущности: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... 
} 

и два 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» отображения, бульдозер отображение всех посещения объективистского ts из посещений партнеров, но каждый визит имеет посетителя с его посещением посещений и т. д., когда атрибут посетителя каждого посещения должен содержать только имя партнера.

Если я пытаюсь исключить поле посетителя из посещения, то работает, и посещение каждого посетителя равно null, но по какой-то причине оно не работает с использованием map-id для использования определенного конкретного сопоставления партнеров.

Любые идеи?

Заранее спасибо.

ответ

0

Это происходит потому, что по умолчанию, бульдозер всегда отображает свойства с таким же именем:

  • Partner.visits
  • PartnerDto.visits

Вы можете отключить эту настройку на < отображение > atribute " подстановочные = ложь».

От Официальной документации де:

ли бульдозер автоматически карта поле с соответствующими именами свойств?

Да. Все поля с соответствующими именами свойств неявно отображаются. Это было бы атипичным использованием, но вы могли бы подавить это поведение, установив wilcard = "false".

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

Вы также можете сделать это для всех отображений, используя глобальную конфигурацию:

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

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