当前位置: 首页 > 面试题库 >

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

富波光
2023-03-14
问题内容

如果我有两个像这样的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


问题答案:

是的,您可以做到。

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

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

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



 类似资料:
  • 我试图创建一个注册用户的功能。 我遵循了这篇文章中的建议:将空作为id保存,并Hibernate,但解决方案对我不起作用。这是我的用户类 这是我的账户类 我的日志显示了以下输出

  • 我有两个具有@ManyToOne关系的实体类,如下所示。 我是Spring Data JPA的新手,所以这可能是一个非常基本的错误。

  • 我想保存两个实体的差异。旧实体有一个id女巫不是空的。新的id值为null,所以我将它们作为ValueObject进行比较。问题是ValueChange确实保存了差异,但没有保存旧的id。ich如何做到这一点?

  • 我有以下实体: 我第一次使用复合主键,所以我不知道它应该如何工作。问题可能来自定义。第二个参数应该表示ID。但是没有一个主键,而是有两个主键,所以我认为我应该将id类添加到id参数中,但这不起作用。如何使用带有CrudRepository的IdClass键保存具有复合主实体?

  • 简而言之,我的问题是如何使用Spring data JPA保存一个具有预置主键(而不是null)的实体。 要进行解释,请考虑一个名为的简单实体类。记住,id没有设置为自动递增,它必须是一个自定义的唯一值。这只是一个小例子。我需要我的实际表中的id是一个自定义的唯一的,比如用户名。 现在,我想我必须插入一个id为101的新客户记录。所料之道是: 但是,没有插入id为101的新客户。那么,我该怎么做呢

  • 我有实体 和EcranChampId 每次尝试保存EcranChamp元素时,我都会出现以下错误 2018-09-25 12:15:42.889警告14216---[nio-8092-exec-8]。w、 s.m.s.DefaultHandlerExceptionResolver:无法转换请求元素:org。springframework。豆子。ConversionNotSupportedExcep