【发布时间】:2020-07-01 13:54:40
【问题描述】:
我正在帮助我的朋友完成一项训练任务。方法如下。
有两个实体:User和Car,它们是一对一的关系。
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
//
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id")
private Car car;
汽车类:
@Entity
@Table(name = "cars")
public class Car {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@OneToOne(mappedBy = "car")
private User user;
@Override
public User getUserByAutoName(String name) {
User user = sessionFactory.getCurrentSession()
.createQuery("SELECT u from User u JOIN Car c on u.id = c.id where c.name = :n", User.class)
.setParameter("n", name)
.getSingleResult();
return user;
据我所知,我们不必明确指出关联部分:
on u.id = c.id
Hibernate 在后台为我们完成了这项工作。但是在这个例子中,当我不这样做时,它会毁掉。 你能帮我清除这一刻吗? :)
【问题讨论】:
-
可以只添加实体的声明吗?
-
测试我在评论中的建议
-
好的,但问题是我们何时必须明确地这样做,在哪些关系类型以及何时可以放弃它
-
您可以选择使用原生 SQL 或利用 HQL 语言
标签: java sql spring hibernate jpa