首页 > 解决方案 > 具有相同列名的命名查询内部连接表的重复数据/值

问题描述

我正在尝试使用下面的命名查询加入三个表: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( );

但是,当我在调试模式下的 searchResults 中检查 b.name 的值时,它会得到 s.name 的值。意思是,b.name 与 s.name 具有相同的名称,即使它应该有自己的名称。我不知道这里有什么问题,我什至给它们起了别名来区分它们。

标签: javamysqlsqlnamed-query

解决方案


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


推荐阅读