User
与Car
为1对1。但User
并不总是Car
。
query = session.createQuery("select u from User as u join fetch u.car");
我只有汽车用户。如何修改此查询以获取所有用户?
我正在使用fetch,因为我需要在会话之外使用user.car,我这样做了吗?
感谢。
答案 0 :(得分:8)
使用专为此明确目的而设计的left join。
query = session.createQuery("select u from User as u left join fetch u.car");
答案 1 :(得分:2)
如果您只想获得所有用户,那么为什么不这样做:
List users = session.createCriteria(User.class).list();
如果您的User类映射到Cars,那么返回的User对象将具有与之关联的Car数据,Hibernate将自动返回此数据(取决于模式,它可能是延迟加载的,即它只会检索一旦你尝试使用它,实际的Cat数据。)
答案 2 :(得分:1)
结果中你需要这辆车吗?否则,“从用户u中选择你”应该完成这项工作。
如果car可以为null但您需要检索它,则可以执行连接提取“从用户u select left join get fetch u.car中选择你”。 希望这是正确的语法。外连接确保即使使用空关系也能获得结果。在这种情况下,连接提取应该足够了。
在hibernate docs中有一些(和工作)示例(“join fetch”):http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/