Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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 JPA多个插入重复值_Spring_Postgresql_Jpa - Fatal编程技术网

Spring JPA多个插入重复值

Spring JPA多个插入重复值,spring,postgresql,jpa,Spring,Postgresql,Jpa,我有以下型号: @Entity @Table(name="`tbUser`") public class User { @Id @SequenceGenerator(name="tbuser_id_seq", sequenceName="tbuser_id_seq", allocationSize=1) @Column(name="`userId`") @GeneratedValue private Long id; @Column

我有以下型号:

@Entity
@Table(name="`tbUser`")
public class User {
    @Id
    @SequenceGenerator(name="tbuser_id_seq",
    sequenceName="tbuser_id_seq",
    allocationSize=1)
    @Column(name="`userId`")
    @GeneratedValue
    private Long id;
    @Column(name="username")
    private String username;
    @Column(name="password")
    private String password;
    @Column(name="nombres")
    private String firstName;
    @Column(name="apellidos")
    private String lastName;
    @Column(name="email")
    private String email;
    @Column(name="`avatarUrl`")
    private String avatarUrl;
    @ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.MERGE)
    @JoinTable(name="`tbUserRole`", 
    joinColumns=@JoinColumn(name="`userId`",referencedColumnName="`userId`"), 
    inverseJoinColumns=@JoinColumn(name="`roleId`",referencedColumnName="`roleId`"))
    private List<Role> roles = new ArrayList<>();
...

@Entity
@Table(name="`tbRole`")
public class Role {
    @Id
    @Column(name="`roleId`")
    @GeneratedValue
    private Long id;
    @Column(name="name")
    String name;
    @ManyToMany(mappedBy="roles")
    private List<User> users = new ArrayList<>();
...
无论哪种方式,角色都会再次插入数据库中

e、 g

如果这些是数据库中的现有角色:

ID   Name
1    ADMIN
2    USER
如果我插入一个具有管理员角色的用户,它将再次插入:

ID Name
1  ADMIN
2  USER
3  ADMIN
我如何解决这个问题


我已经尝试过这个解决方案,但没有成功

角色的名称不是实体的标识符,也不是唯一的。因此,如果执行以下操作,
角色
对象的id将为空:

Role role = new Role();
role.setName("ADMIN");
user.getRoles().add(role);
repository.save(user);
然后,JPA将假定您传递了一个新对象,并将根据
@GeneratedValue
注释为其生成一个新id

假设使用Spring数据,则需要执行以下操作:

Role role = roleRepository.findByName("ADMIN");
user.getRoles().add(role);

角色的名称不是实体的标识符,也不是唯一的。因此,如果执行以下操作,
角色
对象的id将为空:

Role role = new Role();
role.setName("ADMIN");
user.getRoles().add(role);
repository.save(user);
然后,JPA将假定您传递了一个新对象,并将根据
@GeneratedValue
注释为其生成一个新id

假设使用Spring数据,则需要执行以下操作:

Role role = roleRepository.findByName("ADMIN");
user.getRoles().add(role);

您是如何获得角色实例的?您是如何获得角色实例的?这是我所要寻找的…..但是有一个问题:我们不能将角色对象存储在某个地方,以便每次从数据库中提取它吗?这是我所要找的…..但有一个问题:我们不能仅仅将角色对象存储在某个地方,以不提取它每次都是从数据库里?