[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