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

ras*_*cio 5 java hibernate jpa

如果我有两个休眠实体,例如:

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

@Entity
class Person {
     Integer id;
     String name;
     @ManyToOne
     Company company;
}
Run Code Online (Sandbox Code Playgroud)

我有一个已经存储的公司,例如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);
Run Code Online (Sandbox Code Playgroud)

它只保存参考,还是还用 更新公司name=null

v.l*_*nev 2

是的,你可以做到。

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

默认情况下cascade,像这样,Hibernate 将不执行任何操作。所以答案是:它只保存一个外键。

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