Я пытаюсь присоединиться к трем таблицам: Student, BorrowedBook, Books, используя именованный запрос ниже
List< Student > stuList= new ArrayList< Student >( );
StringBuilder sb = new StringBuilder( );
sb.append( "select s.studentId, s.name, s.lastName, b.name " );
sb.append( "from student s " );
sb.append( "inner join borrowedbook c on
s.studentId = c.studentId " );
sb.append( "inner join books b on c.bookId = b.bookId " );
Query query = getSession( ).createSQLQuery( sb.toString( ) );
query.setProperties( Student.class );
List< Object[] > searchResults = query.list( );
Однако, когда я проверяю значение b.name в searchResults в режиме отладки, он получает значение s.name. Значение b.name получает то же имя, что и имя s.name, хотя предполагается, что оно имеет собственное имя. Я не знаю, в чем проблема, я даже дал им псевдоним, чтобы различать их.
Вы должны использовать два столбца name
для разных вещей:
StringBuilder sb = new StringBuilder( );
sb.append( "select s.studentId, s.name as student_name, s.lastName, " );
sb.append( " b.name as book_name " );
sb.append( "from student s " );
sb.append( "inner join borrowedbook c on s.studentId = c.studentId " );
sb.append( "inner join books b on c.bookId = b.bookId " );
Затем получите доступ к вашему результирующему набору, используя имена столбцов student_name
и book_name
.