【发布时间】:2018-03-29 12:38:27
【问题描述】:
我对何时将连接与标准一起使用有点困惑。我在说什么的例子:
.createAlias("cars", "c", JoinType.LEFT_OUTER_JOIN)
以下是不同的 JoinType:
LEFT_OUTER_JOIN
INNER_JOIN
LEFT_OUTER_JOIN
NONE
RIGHT_OUTER_JOIN
当我们用 Hibernate 映射实体时,已经自动有了一个“JoinType”(那是一个 INNER_JOIN 吗?)。
带有用户的简单示例 - 汽车:
用户类(表名USERS)
class User {
@Id
@Column(name="ID_USER")
private int idUser;
@Column(name="NAME")
private String name;
@OneToMany
@JoinColumn(name="ID_USER")
private Set<Car> cars;
}
和汽车类(表名CARS):
class Car{
@Id
@Column(name="ID_CAR")
private int idCar;
@Column(name="MODEL)
private String model;
@Column(name="ID_USER")
private int idUser;
}
如果我有一个用户 u 并且我输入 u.getCars() 默认映射哪个 Join ?
如果我想要以下结果:
SELECT * FROM Users u LEFT JOIN Cars c on u.id_user = c.id_user
那么使用它是否正确:
Criteria c = getSession().createCriteria(User.class);
c.createAlias("cars", "c", JoinType.LEFT_OUTER_JOIN);
return c.list();
(然后我在 User 和 Car 上循环搜索我要查找的内容)。
如果我正在寻找那个:
SELECT * FROM Users u INNER JOIN Cars c on u.id_user = c.id_user
我是否正确地说我不需要创建 JoinType.INNER_JOIN ? 如果我是,当我已经拥有地图实体时,JoinType.INNER_JOIN 就没用了吗?
我必须使用大量的连接来映射很多复杂的表,我有点糊涂了!
【问题讨论】:
标签: java hibernate join criteria