Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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
Spring 更改多个关联的修补程序请求_Spring_Hibernate_Rest_Spring Data Jpa_Spring Data Rest - Fatal编程技术网

Spring 更改多个关联的修补程序请求

Spring 更改多个关联的修补程序请求,spring,hibernate,rest,spring-data-jpa,spring-data-rest,Spring,Hibernate,Rest,Spring Data Jpa,Spring Data Rest,使用SpringDataREST,员工和角色之间的多对多关系需要RESTAPI方面的帮助吗 @Entity @Table(name="employees") public class Employee { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="employees_id_seq") @SequenceGenerator(name="employees_id_seq", sequ

使用SpringDataREST,员工和角色之间的多对多关系需要RESTAPI方面的帮助吗

@Entity
@Table(name="employees")
public class Employee  {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="employees_id_seq")
    @SequenceGenerator(name="employees_id_seq", sequenceName="employees_id_seq", allocationSize=1)
    @Column(name="EMPLOYEE_ID")
    private Long id;

    @NotNull
    private String email;

    @ManyToMany(cascade={}, fetch=FetchType.EAGER, targetEntity=Role.class) 
    @JoinTable(
        name="employee_roles",
        joinColumns=@JoinColumn(name="EMPLOYEE_ID", referencedColumnName="EMPLOYEE_ID"),
        inverseJoinColumns = @JoinColumn(name="ROLE_ID", referencedColumnName="ROLE_ID")
    )
    private List<Role> roles;

    public Employee() {
        System.out.println("Employee created");
    }

    public Employee(long id, String firstName, String lastName, String email) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }

// Getters , Setter, etc.
}

@Entity
@Table(name="roles")
public class Role {

    @Id
    @Column(name="ROLE_ID")
    private String roleId;
    private String roleName;

    public Role() {

    }
// Getters, Setters, etc
}
我在数据库中有以下角色数据:

从角色中选择角色id、角色名称

role_id   role_name
-------   -------
adm       Admin
usr       User
我想删除用户角色并保留该用户的管理员角色。我正在尝试使用以下有效负载的补丁请求

{
"roles": [ {"roleId": "adm"}]
}
不幸的是,它会导致以下错误:

org.hibernate.HibernateException:角色实例的标识符已从usr更改为adm

如果我尝试删除带有负载的角色Admin

{ 
  "roles": [ {"roleId": "usr"}] 
}
它很好用

行为似乎取决于角色Id的顺序


感谢您的帮助或建议。

更改SDR中角色集合的正确机制是发送补丁请求,如下所示:

{ 
  "roles": [ 
      "http://localhost:8091/roles/adm",
      "http://localhost:8091/roles/usr"
  ] 
}
但是,请参见料斗SR5中引入的以下回归,该回归将固定在Hooper SR9中


非常感谢Alan,我使用了您建议的有效载荷,得到了与中所述相同的问题。我将尝试升级我的设置。现在,如果你回滚到Hopper-SR4版本,它将工作。我对这种东西很陌生。我应该如何指定此版本?目前,我在项目的pom中有以下内容:
org.springframework.data spring data rest webmvc 2.6.2.BUILD-SNAPSHOT
和此存储库(maven didi未找到与初始化器创建的pom的依赖关系)my-repo 1您的自定义repo-repo.spring.io/libs-SNAPSHOT
{ 
  "roles": [ {"roleId": "usr"}] 
}
{ 
  "roles": [ 
      "http://localhost:8091/roles/adm",
      "http://localhost:8091/roles/usr"
  ] 
}