按照 Andy Pryor 的建议,我能够通过将我的 SQL 语句更新为如下内容来解决问题:
SELECT
// ... other content
'POSTAL' as Postal_Address_Type,
postal_address_line_1,
postal_address_line_2,
postal_address_city,
'CLEANSED' as Cleansed_Address_Type,
cleansed_address_line_1,
cleansed_address_line_2,
cleansed_address_city,
// ... other content
然后将我resultMap
的更新为以下内容:
<resultMap ...>
//... other content
<association property="postalAddress" javaType="com.x.y.z.Address">
<result property="type" column="Postal_Address_Type"/>
<result property="line1" column="Address_Part_1_Name"/>
<result property="line2" column="Address_Part_2_Name"/>
//...other content
</association>
<association property="cleansedAddress" javaType="com.x.y.z.Address">
<result property="type" column="Cleansed_Address_Type"/>
<result property="line1" column="Address_Part_1_Name"/>
<result property="line2" column="Address_Part_2_Name"/>
//...other content
</association>
</resultMap>
最后,在我的Address
班级中,我能够拥有setType(Type)
并且内置的枚举类型处理程序具有魔力。在Location
类中,我只能有一个实例列表,Address
并且各种 setXXXAddress() 方法可以适当地添加到该列表中。
It is unfortunate that I cannot plug the columns into some sort of factory class but putting hard-coded types into the SQL statement isn't too dirty, in my opinion. The disadvantage is that I have introduced coupling between the domain model's Address.Type
values and the SQL statement but this is kind of already there given that the resultMap
SQL XML needs to hold the names of instance variables in the Address
class anyway.