Java 各种jpa方法的真实场景

Java 各种jpa方法的真实场景,java,hibernate,jpa,Java,Hibernate,Jpa,我正在寻找一些使用hibernate/jpa方法的真实场景 例如何时使用merge()和何时使用persist() 何时使用getReference()与find() 何时需要拆离该对象?分离实体有什么用 以下是一些例子: 每当需要将新对象放入数据库时,应使用persist()。虽然merge()将在对象不存在时持久化该对象,但在使用merge()持久化新对象时,在某些特殊情况下(至少对我而言)发生了奇怪的事情。merge()非常有用的一种情况是,当您第一次从数据库获取对象时,将其传递到视图/控

我正在寻找一些使用hibernate/jpa方法的真实场景

  • 例如何时使用merge()和何时使用persist()
  • 何时使用getReference()与find()
  • 何时需要拆离该对象?分离实体有什么用

  • 以下是一些例子:

  • 每当需要将新对象放入数据库时,应使用
    persist()
    。虽然
    merge()
    将在对象不存在时持久化该对象,但在使用
    merge()
    持久化新对象时,在某些特殊情况下(至少对我而言)发生了奇怪的事情。
    merge()
    非常有用的一种情况是,当您第一次从数据库获取对象时,将其传递到视图/控制器层(或以任何其他方式分离),对其进行更改并希望保存更改。使用
    merge()
    这是自动完成的,否则您必须按id从db中获取对象,并从分离的字段中复制所有字段(如果您不确切知道更改了什么)
  • 当您知道某个实体对象的id时(通过访问其分离副本或其他方式),您只需要将其与另一个实体对象关联。使用
    getReference()
    时,您不会将整个对象加载到会话中,您只会将它的引用设置到附加对象中,这样您最终(至少)比使用
    find()
    时少了一个查询。另一方面,
    find()
    加载整个对象,无需为此指定用例
  • 尽管本例中应该使用DTO,但假设您有一个web服务返回实体的实例。你不想返回它的所有数据,你想空一些属性。若在附加对象上执行此操作,那个么这些空值将保存到数据库中。因此,在将其返回给web服务调用方之前,您可以分离并安全地修改它

  • 为什么“合并”在保留临时实体时创建副本?这是一篇关于
    合并
    持久化
    的好文章,它应该能帮你把事情弄清楚。还有一些更有用的链接:和