Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 如何解决PersistentObjectException:传递给persist的分离实体_Java_Postgresql_Jpa_Spring Data Jpa - Fatal编程技术网

Java 如何解决PersistentObjectException:传递给persist的分离实体

Java 如何解决PersistentObjectException:传递给persist的分离实体,java,postgresql,jpa,spring-data-jpa,Java,Postgresql,Jpa,Spring Data Jpa,我正在我的存储库中创建一个查询,用于更新某些用户的字段,但我不断收到以下错误:PersistentObjectException:传递给persist的分离实体: 我在stackoverflow中尝试了建议的解决方案,其中说我需要将“cascade=CascadeType.ALL”更改为“cascade=CascadeType.MERGE”,但仍然不适用于我 用户实体: ........ @Id @GeneratedValue(strategy = GenerationType.

我正在我的存储库中创建一个查询,用于更新某些用户的字段,但我不断收到以下错误:
PersistentObjectException:传递给persist的分离实体:
我在stackoverflow中尝试了建议的解决方案,其中说我需要将
“cascade=CascadeType.ALL”
更改为
“cascade=CascadeType.MERGE”
,但仍然不适用于我

用户实体:

........
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer                             userId;

    @Column(unique = true)
    private String                              username;

    @ManyToOne(cascade = {
        CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH
    }, fetch = FetchType.LAZY)
    @JoinColumn(name = "address", updatable = true)
    private Address             address;
  @Transactional
    @Modifying
    @Query("update user u set u.address = :address where u.userId = :userId")
    public int updateUserEtablissementAndLabels(
        @Param("userId") Integer userId,
        @Param("address ") Address address 
    );
用户存储库:

........
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer                             userId;

    @Column(unique = true)
    private String                              username;

    @ManyToOne(cascade = {
        CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH
    }, fetch = FetchType.LAZY)
    @JoinColumn(name = "address", updatable = true)
    private Address             address;
  @Transactional
    @Modifying
    @Query("update user u set u.address = :address where u.userId = :userId")
    public int updateUserEtablissementAndLabels(
        @Param("userId") Integer userId,
        @Param("address ") Address address 
    );

请向我们展示您对引发异常的事务中的实体所做的操作。还显示完整的堆栈跟踪。这几乎肯定与您显示的存储库方法无关,只是它会触发刷新。感谢您的评论,问题在于级联,因此我通过删除cascadetype=persist和cascadetype=refresh来解决问题。请向我们展示您对引发异常的事务中的实体所做的操作。还显示完整的堆栈跟踪。这几乎肯定与您显示的存储库方法无关,只是它会触发刷新。感谢您的评论,问题在于级联,因此我通过删除cascadetype=persist和cascadetype=refresh来解决问题