2012-03-15 4 views
0

Я использую MyBatis для простого выбора.Mybatis select with inested objects

Предположим, мы имеем следующие классы:

class Book { 
    private String bookName; 

    public Book(String bookName){ 
     this.bookName = bookName; 
    } 

    public String getBookName(){ 
     return bookName; 
    } 
} 


class Student { 
    private String studentName; 
    private Book book; 

    public Student(){} 

    // getters and setters 
} 

У меня есть аннотацию на метод, который возвращает объект Student.

@Select("Select studentName, book from Students") 

Мой номер: эта книга всегда имеет значение null. Я был в предположении, что MyBatis вызовет конструктор с этим типом JDBC (в данном случае String) для заполнения книги. Что я пропущу или делаю неправильно?

ответ

0

Одним из вариантов является

Используйте @ConstructorArgs аннотаций явно вызвать метод конструктора.

@Select("Select studentName, book from Students") 
@ConstructorArgs(value = { 
@Arg(column = "studentName", javaType=java.lang.String.class), 
@Arg(column = "book", javaType = java.lang.String.class) 
}) 

и передать их студенту-конструктору, который вызывает конструктор книг.