[Javalist] DTO -> entitás mappelés
malary
malary at malary.hu
2012. Jan. 11., Sze, 00:53:47 CET
Sziasztok!
DTO -> entitás mappelésében kérném a segítségeteket, hátha már valaki belefutott a következő problémába.
Van egy kupac entitásom:
public class User {
private Integer id;
private String name;
private Organization organization;
}
public class Organization {
private Integer id;
private String name;
private List<User> users;
}
És egy DTO-m:
public class UserDTO {
private Integer id;
private String name;
private Integer organizationId;
private String organizationName;
}
Amit szeretnék, hogy egy REST szerű protokollon a service kap egy xml-t, amiből előállítom (JAXB-vel) a UserDTO-t.
A UserDTO-ból úgy gondoltam, hogy dozerral átmappelem a tartalmat egy User entitásba.
Az ilyen kiterített fieldekre vannak ilyen mappingjeim:
<mapping>
<class-a map-null="false">User</class-a>
<class-b>UserDTO</class-b>
<field>
<a>organization.id</a>
<b>organizationId</b>
</field>
</mapping>
A probléma az, hogy ilyenkor létrejön egy új User entitás, és benne egy új Organization entitás.
Ellenben én azt szeretném, hogy ha az organizationId nem null, akkor az Organization JPA-n keresztül betöltődjön.
Ezt a problémát úgy gondoltam megoldani, hogy létrehozok egy bean-factory-t, ami ha a forrás DTO-ban az id nem null,
akkor betölti az entitást, ha null, akkor példányosít egy újat. (Nem létező id-nél pedig egy kultúrált exceptiont dob)
Ez után kiderült, hogy az <a>, <b> elemeknek nincs bean-factory attribútuma, és amikor mappeli az organizationId mezőt,
akkor a destBean-t mindig default konstruktorral hozza létre.
A kérdésem az lenne, hogy hogyan szokás az ilyet megoldani?
(Kellő képpen általánosnak tűnik a probléma ahhoz, hogy valaki már ne oldotta volna már meg :)
Köszi
malary
További információk a(z) Javalist levelezőlistáról