Дублирующиеся данные / значение для таблиц внутреннего именованного запроса с тем же именем столбца

0

Я пытаюсь присоединиться к трем таблицам: 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, хотя предполагается, что оно имеет собственное имя. Я не знаю, в чем проблема, я даже дал им псевдоним, чтобы различать их.

  • 2
    Вы упомянули, что пытались использовать псевдоним здесь, но я нигде не вижу этой попытки. Во всяком случае, на самом деле это один из способов решить вашу проблему.
Теги:
named-query

1 ответ

0

Вы должны использовать два столбца 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.

  • 0
    Я получаю ошибку. Он слишком длинный для всего стека. Причина: com.ibm.db2.jcc.am.SqlException: [jcc] [10150] [10300] [4.14.137] Недопустимый параметр: неизвестное имя столбца NAME. ERRORCODE = -4460, SQLSTATE = null в com.ibm.db2.jcc.am.ed.a (ed.java:661) в com.ibm.db2.jcc.am.ed.a (ed.java:60) на com.ibm.db2.jcc.am.ed.a (ed.java:103) на com.ibm.db2.jcc.am.fb.a (fb.java:2122) на com.ibm.db2.jcc .am.ResultSet.findColumnX (ResultSet.java:1932) при com.ibm.db2.jcc.am.ResultSet.getString (ResultSet.java:1704) в com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.getString (WSJdbcResultSet .java: 2467)
  • 0
    00000044 SystemErr R org.hibernate.exception.GenericJDBCException: не удалось выполнить запрос в org.hibernate.exception.SQLStateConverter.handledNonSpecificException (SQLStateConverter.java:126) в org.hibernate.exception.SQLStateConverter.con4.jpg (SQL) org.hibernate.exception.JDBCExceptionHelper.convert (JDBCExceptionHelper.java:66)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню