【问题标题】:Hibernate/Postgres: duplicate key value violates unique constraintHibernate/Postgres:重复键值违反唯一约束
【发布时间】:2020-05-28 03:43:42
【问题描述】:

我在注册请求期间添加用户角色时遇到问题

这是我的数据库图:

我有以下类:首先是实体角色:

    package application.model;

    import lombok.*;
    import javax.validation.constraints.NotEmpty;
    import javax.validation.constraints.NotNull;
    import javax.persistence.*;
    import java.util.List;

    @NamedQueries({
            @NamedQuery(name = User.GET_USERS, query = User.QUERY_GET_USERS),
    })
    @Getter
    @Setter
    @NoArgsConstructor
    @Entity
    @Table(name = "users")
    public class User {
        public static final String GET_USERS = "User.get_users";
        public static final String QUERY_GET_USERS = "select u from User u";


        @Id
        @NotNull
        @GeneratedValue(strategy = GenerationType.SEQUENCE)
        @Column(name = "id")
        public int id;

        @NotNull
        @NotEmpty
        @Column(name="firstname")
        private String firstname;

        @NotNull
        @Column(name="lastname")
        private String lastname;

        @NotNull
        @Column(name="email")
        private String email;

        @NotNull
        @Column(name="password")
        private String password;

        @JoinTable
        @OneToMany
        private List<Role> roles;
    }

第二个实体是角色:

    package application.model;

    import lombok.Getter;
    import lombok.NoArgsConstructor;
    import lombok.Setter;
    import javax.persistence.*;
    import javax.validation.constraints.NotNull;

    @Getter
    @Setter
    @NoArgsConstructor
    @Entity
    @Table(name = "role")
    public class Role {
        @Id
        @NotNull
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
        public int id;

        @NotNull
        @Column(name="name")
        private String name;

    }

所以,当我通过发布请求注册新用户时,我的应用程序中有 3 个角色:

{
        "firstname": "imasdie5",
        "lastname": "nazasdwisko5",
        "email": "masdil",
        "password": "pass",
        "roles": [
             { "id":2 }
         ]
    }

第一个用户注册正确,但是当我发送具有相同角色.id=2 的第二个请求时,我有:

错误:重复键值违反唯一约束“uk_d9najy24fium4vkivgwjuf0hw” 详细信息:键 (roles_id)=(2) 已存在。

在 dbeaver 表中 users_role 有约束 uk_d9najy24fium4vkivgwjuf0hw 类型为 UNIQUE_KEY,所以这就是问题所在,但是如何将类型更改为非唯一?许多用户可能具有相同的角色,所以对我来说是必要的

所有表都是用休眠生成的。 表 users_role 在我的应用程序中不是实体,也许它应该是实体? 你有什么建议我应该改变什么来为许多用户添加一个角色?

【问题讨论】:

    标签: java spring postgresql hibernate


    【解决方案1】:

    尝试使用@ManyToMany注解

        @JoinTable
        @ManyToMany
        private List<Role> roles;
    

    【讨论】:

    • 工作,谢谢 :) 我在几分钟前试过了,但我有 hibernate.hbm2ddl.auto=update 而不是 create-drop
    猜你喜欢
    • 2016-09-27
    • 1970-01-01
    • 2012-06-20
    • 2012-03-03
    • 1970-01-01
    • 2019-03-20
    • 2022-11-04
    • 2021-04-10
    相关资源
    最近更新 更多