一尘不染

使用仅具有ID值的实体保存外键

hibernate

如果我有两个像这样的hibernate实体:

@Entity
class Company {
     @Id
     Integer id;
     String name;
}

@Entity
class Person {
     Integer id;
     String name;
     @ManyToOne
     Company company;
}

我有一个已经存储的公司 Company(id:1, name:"Acme")

我可以创建一个仅用其ID引用公司的人,而不是加载整个记录,例如:

Session session = SessionFactory.openSession();
Company acme = new Company();
acme.setId(1);
Person person = new Person();
person.setName("Manuel");
person.setCompany(acme);

session.save(person);

它是仅保存参考还是使用更新公司name=null


阅读 199

收藏
2020-06-20

共1个答案

一尘不染

是的,您可以做到。

它是否仅保存引用,还是使用name = null更新公司?

使用default cascade,这样,Hibernate将不执行任何操作。因此答案是:它只保存一个外键。

最有效的方法(也适用于JPA)使用session.load(Company.class, 1)。它不向数据库发出任何请求就返回一个代理。但是,当然,您需要为此举行一次会议。

2020-06-20