Сопоставитель Java MyBatis для коллекции

Я пытаюсь написать MyBatis Mapper для следующих java-объектов, и вывод картографа ожидает List в качестве возвращаемого типа.

class Blog{
private final String name;
private final String author;
private final List<Posts> posts;

// I follow builder pattern, so the below private constructor is intended for MyBatis alone
private Blog(String name, String author, List<Posts> posts){
this.name = name;
this.author= author;
this.posts= posts;

...... excluding getters and builder class as it it not relevant in this case
}

Объект сообщения будет выглядеть так, как показано ниже.

class Post{
private final String postName;
private final String postSummary;

// Same here as well. Private constructor only to satisfy MyBatis.
private Post(String postName, String postSummary) {
this.postName = postname;
this.postSummary = postSummary;
}

BlogRepoMapper выглядит следующим образом:

public List<Blog> getAllBlogPosts();

BlogMapper.xml

<select id="getAllBlogPosts" resultMap = "blogResultMapper"
BLOGNAME, AUTHOR, POSTNAME, POSTSUMMARY from BLOGDETAILS>
</select>
<resultMap id="blogResultMapper" type="Blog">
 <constructor>
  <arg column="BLOGNAME" javaType="String" />
  <arg column="AUTHOR" javaType="String" />
 </constructor>
<collection property="posts" ofType="posts" resultMap="postsMapper" />
</resultMap>
<resultMap id="postsMapper" type="Posts">
 <constructor>
  <arg column="POSTNAME" javaType="String" />
  <arg column="POSTSUMMARY" javaType="String" />
 </constructor>
</resultMap>

Я не уверен, как написать карту результатов для запроса выбора, поскольку он включает в себя сбор объектов Post. Я пытался пару раз, но получил следующее исключение

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class Blog with invalid types (String,String) or values (JavaBlog, JavaAuthor). Cause: java.lang.NoSuchMethodException: Blog.<init>(java.lang.String, java.lang.String)
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77) ~[mybatis-spring-1.3.1.jar:1.3.1]
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) ~[mybatis-spring-1.3.1.jar:1.3.1]
    at com.sun.proxy.$Proxy78.selectList(Unknown Source) ~[na:na]
    at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230) ~[mybatis-spring-1.3.1.jar:1.3.1]
    at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137) ~[mybatis-3.4.3.jar:3.4.3]
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75) ~[mybatis-3.4.3.jar:3.4.3]
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) ~[mybatis-3.4.3.jar:3.4.3]

Высоко ценим любую помощь, чтобы получить решение для вышеуказанного картографа.


person technoJ    schedule 02.12.2017    source источник
comment
Пожалуйста, опубликуйте полную трассировку стека исключений и опубликуйте полную BlogRepoMapper.   -  person Mark Rotteveel    schedule 02.12.2017
comment
@MarkRotteveel задается вопросом, почему вы пометили его как дубликат. Мой запрос был о создании неизменяемых объектов (которые содержат список объектов) с помощью mybatis mapper   -  person technoJ    schedule 05.12.2017
comment
Вы правы, но ваш вопрос не был очень конкретным по этому поводу. В любом случае вы определяете конструктор Blog(String, String, List), а ваше определение преобразователя определяет конструктор Blog(String, String), поэтому убедитесь, что ваше определение преобразователя соответствует фактическому конструктору.   -  person Mark Rotteveel    schedule 05.12.2017
comment
Да... Я пробовал описанный выше подход, но MyBatis не может установить значения для списка. Когда объект создан, двум строковым значениям присваиваются правильные значения, но список равен нулю.   -  person technoJ    schedule 06.12.2017
comment
Вы можете использовать сеттеры для инициализации значений вместо того, чтобы использовать сложный путь конструкторов. Просто удалите конструктор и используйте <result property="" column="" /> намного проще   -  person MohamedSanaulla    schedule 12.12.2017
comment
Сеттер не используется, так как мой класс домена (блог) неизменен.   -  person technoJ    schedule 12.12.2017