ambiguous模棱两可的,不知道对应哪个表的name列。改为 select u.name as uname,p.name as pname from user u left join passenger p on p.user_id = u.id
这不就是我说的第二个情况么 报这个 2013-08-30 14:02:13,279 INFO [org.hibernate.type.StringType] - <could not read column value from result set: name; Column 'name' not found.> 2013-08-30 14:02:13,281 WARN [org.hibernate.util.JDBCExceptionReporter] - <SQL Error: 0, SQLState: S0022> 2013-08-30 14:02:13,282 ERROR [org.hibernate.util.JDBCExceptionReporter] - <Column 'name' not found.>
Column 'name' not found 错误类型又不一样了。
select u.name as uname, p.name as pname from passenger p left join order o on p.order_id = o.id left join user u on o.user_id = u.id 这样连接有问题吗
比如你用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,所以只要把查询方式变成一个函数或者表达式就行了。
select u.name as uname,p.name as pname
from user u left join passenger p on p.user_id = u.id
报这个
2013-08-30 14:02:13,279 INFO [org.hibernate.type.StringType] - <could not read column value from result set: name; Column 'name' not found.>
2013-08-30 14:02:13,281 WARN [org.hibernate.util.JDBCExceptionReporter] - <SQL Error: 0, SQLState: S0022>
2013-08-30 14:02:13,282 ERROR [org.hibernate.util.JDBCExceptionReporter] - <Column 'name' not found.>
错误类型又不一样了。
from passenger p
left join order o on p.order_id = o.id
left join user u on o.user_id = u.id
这样连接有问题吗
我当时也查了很多资料都没有说这个问题是怎么回事,只有自己debug,发现应该是hibernate在处理列名的时候,用的是resultSetMetaData.getColumnLabel(),而当查询的只有一列的时候,比如u.name,p.name这些都是单列的查询,那么就算加了别名,ColumnLabel仍然是name,而不会是uname,pname,所以只要把查询方式变成一个函数或者表达式就行了。