比如你用select u.name as uname,p.name as pname这样就会产生后面的值覆盖前面的值,我一般是这样用的select ifnull(u.name,''),ifnull(p.name,'')
我当时也查了很多资料都没有说这个问题是怎么回事,只有自己debug,发现应该是hibernate在处理列名的时候,用的是resultSetMetaData.getColumnLabel(),而当查询的只有一列的时候,比如u.name,p.name这些都是单列的查询,那么就算加了别名,ColumnLabel仍然是name,而不会是uname,pname,所以只要把查询方式变成一个函数或者表达式就行了。
我当时也查了很多资料都没有说这个问题是怎么回事,只有自己debug,发现应该是hibernate在处理列名的时候,用的是resultSetMetaData.getColumnLabel(),而当查询的只有一列的时候,比如u.name,p.name这些都是单列的查询,那么就算加了别名,ColumnLabel仍然是name,而不会是uname,pname,所以只要把查询方式变成一个函数或者表达式就行了。