我对MyBatis设置String类型的集合有疑问。
我有以下2个Pojo课程:
public class Person {
private long personId;
private String lastName;
private String firstName;
private Set<String> belongings;
public Person(String lastName, String firstName) {
this.lastName = lastName;
this.firstName = firstName;
}
public Person(Long personId, String lastName, String firstName) {
this(lastName, firstName);
this.personId = personId;
}
// Getters & Setters
}
public class Mariage {
private final Person husband;
private final Person wife;
public Mariage(Person husband, Person wife) {
this.husband = husband;
this.wife = wife;
}
// Getters & Setters
}
以及以下MyBatis xml代码:
<resultMap type="Mariage" id="mariageResultMap">
<constructor>
<idArg javaType="Person" resultMap="husbandResultMap"/>
<idArg javaType="Person" resultMap="wifeResultMap"/>
</constructor>
</resultMap>
<resultMap type="Person" id="husbandResultMap">
<constructor>
<idArg column="h_person_id" javaType="long"/>
<arg column="h_last_name" javaType="string"/>
<arg column="h_first_name" javaType="string"/>
</constructor>
<collection property="belongings" column="h_belonging" ofType="string"/>
</resultMap>
<resultMap type="Person" id="wifeResultMap">
<constructor>
<idArg column="w_person_id" javaType="Long"/>
<arg column="w_last_name" javaType="string"/>
<arg column="w_first_name" javaType="string"/>
</constructor>
<collection property="belongings" column="w_belonging" ofType="string"/>
</resultMap>
<insert id="savePerson">
<selectKey keyProperty="personId" resultType="long" order="BEFORE">
SELECT nextval('persons_person_id_seq')
</selectKey>
INSERT INTO persons(person_id, last_name, first_name)
VALUES(#{personId}, #{lastName}, #{firstName} );
INSERT INTO belongings(person_id, name) values
<foreach collection="belongings" item="name" separator=", " close=";">
(#{personId}, #{name})
</foreach>
</insert>
<insert id="saveMariage" parameterType="Mariage">
INSERT INTO mariages(husband_id
, wife_id)
VALUES(#{husband.personId}
, #{wife.personId});
</insert>
<select id="getMariages" resultMap="mariageResultMap">
SELECT h.person_id h_person_id
, h.last_name h_last_name
, h.first_name h_first_name
, bh.name h_belonging
, w.person_id w_person_id
, w.last_name w_last_name
, w.first_name w_first_name
, bw.name w_belonging
FROM mariages m
JOIN persons h ON m.husband_id = h.person_id
JOIN persons w ON m.wife_id = w.person_id
JOIN belongings bh ON bh.person_id = h.person_id
JOIN belongings bw ON w.person_id = bw.person_id
ORDER BY h_last_name
, h_first_name
, w_last_name
, w_first_name
, h_belonging
, w_belonging;
</select>
挽救人(丈夫和妻子)以及婚姻没有问题。它们很好地保存在数据库中。 但是,从数据库中检索杂物是个问题。 我确实与丈夫和妻子的婚姻有了正确的名字,但是他们的财产(字符串类型的集合)没有初始化。 在日志中,我可以看到查询getMariages正在执行。 执行此查询将给出(与先前插入的人员,财产和航海物一起)给出:
h_person_id | h_last_name | h_first_name | h_belonging | w_person_id | w_last_name | w_first_name | w_belonging
------------+-------------+--------------+-------------+-------------+-------------+--------------+-------------
13 | Doe | John | Chicken | 14 | Smith | Jane | Cat
13 | Doe | John | Chicken | 14 | Smith | Jane | Parrot
13 | Doe | John | Dog | 14 | Smith | Jane | Cat
13 | Doe | John | Dog | 14 | Smith | Jane | Parrot
13 | Doe | John | Goldfish | 14 | Smith | Jane | Cat
13 | Doe | John | Goldfish | 14 | Smith | Jane | Parrot
13 | Doe | John | Lizzard | 14 | Smith | Jane | Cat
13 | Doe | John | Lizzard | 14 | Smith | Jane | Parrot
13 | Doe | John | Turtle | 14 | Smith | Jane | Cat
13 | Doe | John | Turtle | 14 | Smith | Jane | Parrot
11 | Johnson | Charles | Bed | 12 | Peterson | Jill | Car
11 | Johnson | Charles | Bed | 12 | Peterson | Jill | House
11 | Johnson | Charles | Chair | 12 | Peterson | Jill | Car
11 | Johnson | Charles | Chair | 12 | Peterson | Jill | House
11 | Johnson | Charles | Table | 12 | Peterson | Jill | Car
11 | Johnson | Charles | Table | 12 | Peterson | Jill | House
出了什么问题? h_belonging列在丈夫结果映射中映射到集合所有物:
<collection property="belongings" column="h_belonging" ofType="string"/>