如果我有两个像这样的hibernate实体:
@Entity class Company { @Id Integer id; String name; } @Entity class Person { Integer id; String name; @ManyToOne Company company; }
我有一个已经存储的公司 Company(id:1, name:"Acme")
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?
name=null
是的,您可以做到。
它是否仅保存引用,还是使用name = null更新公司?
使用default cascade,这样,Hibernate将不执行任何操作。因此答案是:它只保存一个外键。
cascade
最有效的方法(也适用于JPA)使用session.load(Company.class, 1)。它不向数据库发出任何请求就返回一个代理。但是,当然,您需要为此举行一次会议。
session.load(Company.class, 1)