Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate JPA:合并分离对象的有效方法是什么?_Hibernate_Jpa_Spring Mvc - Fatal编程技术网

Hibernate JPA:合并分离对象的有效方法是什么?

Hibernate JPA:合并分离对象的有效方法是什么?,hibernate,jpa,spring-mvc,Hibernate,Jpa,Spring Mvc,技术:Spring、Hibernate、JSR-303、JQuery 平台:Windows 我试图实现一个简单的更新用例。请看 Class2包含许多属性,包括Class1。Class2Controller利用Spring创建一个新的Class2对象,并将HttpRequest对象参数绑定到Class2。然后它调用服务,服务又调用DAO。在DAO中,将这个新的Class2对象更新到数据库的最有效方法是什么 备选案文1: 目前在DAO中,我从数据库中检索Class2对象 Class2 class2

技术:Spring、Hibernate、JSR-303、JQuery
平台:Windows

我试图实现一个简单的更新用例。请看

Class2包含许多属性,包括Class1。Class2Controller利用Spring创建一个新的Class2对象,并将HttpRequest对象参数绑定到Class2。然后它调用服务,服务又调用DAO。在DAO中,将这个新的Class2对象更新到数据库的最有效方法是什么

备选案文1:

  • 目前在DAO中,我从数据库中检索Class2对象

    Class2 class2peristed=em.find(Class2.class,class2Request.getId())

  • 使用请求对象和提交中的属性更新检索到的对象

    tx.begin();
    class2Persisted.setClass1(class2Request.getClass1());
    em.merge(class2Request);
    tx.commit();
    
  • 上面,我只使用setClass1更新了一个属性。但是类2中有许多属性需要更新。有没有其他有效的方法在对象级别而不是在每个属性级别合并class2Persisted和class2Request

选择2

  • 让Class2Controller检索class2Persisted对象并请求Spring绑定参数

  • 我意识到选项2不是一个可行的选项。请参阅我以前遇到的另一个问题。Hibernate将尝试加载相关对象,并在没有自定义约束的情况下抛出
    EntityNotFoundException
    @IdMustExist
    以获得验证机会


如果您有任何其他建议,请提出建议。

您应该使用,dynamic update=true来更新实体/表&它经过了高度优化,只会更新值已更改的列,不包括所有字段

您可以使用via注释驱动的pojo @org.hibernate.annotations.Entity(dynamicUpdate=true)


class2Persisted和class2Request是否在数据库中是相同的底层行?(例如,它们是否具有相同的唯一ID)?通常,您不应使用合并,而应使用“扩展持久性上下文”