Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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
Java JPA仅在模型存在时更新_Java_Hibernate_Jpa_Hibernate Jpa - Fatal编程技术网

Java JPA仅在模型存在时更新

Java JPA仅在模型存在时更新,java,hibernate,jpa,hibernate-jpa,Java,Hibernate,Jpa,Hibernate Jpa,em.merge不是一个选项,因为如果id不存在,我不需要新行。此外,它还调用一个额外的select 我不想做查找,然后调用合并,因为这将再次是额外的选择 我希望找到一种不必编写JPQL查询的方法,因为我不确定要更新的字段的确切数量 如果无法进行“额外”选择,您希望如何确定是否存在某些内容?您是否尝试过@Query(value=“update E set field=:value WHERE id=:id”)?如果id不存在,它不会更新任何内容。所以您想创建一个新对象(非托管),然后尝试将其持久

em.merge不是一个选项,因为如果id不存在,我不需要新行。此外,它还调用一个额外的select

  • 我不想做查找,然后调用合并,因为这将再次是额外的选择

  • 我希望找到一种不必编写JPQL查询的方法,因为我不确定要更新的字段的确切数量


  • 如果无法进行“额外”选择,您希望如何确定是否存在某些内容?您是否尝试过
    @Query(value=“update E set field=:value WHERE id=:id”)
    ?如果id不存在,它不会更新任何内容。所以您想创建一个新对象(非托管),然后尝试将其持久化?如果您不想编写
    jpql
    update查询,我认为额外的选择是不可避免的。使用这种方法,正如您所说,您需要调用
    entityManager.find
    ,然后调用
    update
    方法。但我认为最好的解决方案是使用jpql更新查询(如评论中所述)。因为它没有额外的选择开销,并且在数据不存在时也不会进行任何更改。@hamed是的,我希望除了编写JPQL查询之外还有其他方法。如果不能进行“额外”选择,您希望如何确定是否存在某些内容?您是否尝试过
    @query(value=“update E set field=:value WHERE id=:id”)
    ?如果id不存在,它不会更新任何内容。所以您想创建一个新对象(非托管),然后尝试将其持久化?如果您不想编写
    jpql
    update查询,我认为额外的选择是不可避免的。使用这种方法,正如您所说,您需要调用
    entityManager.find
    ,然后调用
    update
    方法。但我认为最好的解决方案是使用jpql更新查询(如评论中所述)。因为它没有额外的select开销,而且如果数据不存在,也不会进行任何更改。@hamed是的,我希望除了编写JPQL查询之外,还有其他方法。