У меня проблема с коллекциями настроек 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
}
И следующий код xml MyBatis:
<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>
Спасение людей (мужа и жены), а также браков - не проблема.Они хорошо сохраняются в базе данных.Но извлечение брака из базы данных является проблемой.Я получаю браки с мужьями и женами с правильными именами, но их вещи (коллекция типа String) не инициализируются.В журнале я вижу, как выполняется запрос 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 сопоставлен в карте souResultMap с вещами коллекции:
<collection property="belongings" column="h_belonging" ofType="string"/>