Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 Hibernate返回com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:重复条目_Java_Hibernate_Hibernate Mapping - Fatal编程技术网

Java Hibernate返回com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:重复条目

Java Hibernate返回com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:重复条目,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,我试图按如下方式插入成员类,但它返回以下异常 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '' for key 'UK_7pn834d04yft1rkvpqf0viuyc' 代码 Member member = new Member(email, encodedPassword, "USER", false, fi

我试图按如下方式插入
成员
类,但它返回以下异常

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 
Duplicate entry '' for key 'UK_7pn834d04yft1rkvpqf0viuyc'
代码

Member member = new Member(email, encodedPassword,
                    "USER", false, firstName,
                    lastName);

....
session.save(member);
实体

@Entity
public class Member {
    @Id
    @Column(name = "username", nullable = false, unique = true)
    private String email;
    @Column(nullable = false)
    private String password;
    @Column(nullable=false)
    private String authority;
    @Column(nullable = false)
    private boolean enabled;
    @Column(nullable = false)
    String fname;
    @Column(nullable = false)
    String lname;
    @OneToMany
    List<Product> products = new ArrayList<Product>();
    @OneToMany(mappedBy = "requester")
    private Set<Friendship> friendRequests = new HashSet<Friendship>();
    @OneToMany(mappedBy = "friend")
    private Set<Friendship> friends= new HashSet<Friendship>();
    .....
}



 @Entity
public class Friendship implements Serializable {

    private static final long serialVersionUID = -12799066578787745989L;
    @Id
    @ManyToOne
    @JoinColumn(referencedColumnName = "username")
    Member requester;
    @Id
    @ManyToOne
    @JoinColumn(referencedColumnName = "username")
    Member friend;
    @Temporal(javax.persistence.TemporalType.DATE)
    Date date;
    @Column(nullable = false)
    boolean active;

    .....
}
@实体
公共班级成员{
@身份证
@列(name=“username”,nullable=false,unique=true)
私人字符串电子邮件;
@列(nullable=false)
私有字符串密码;
@列(nullable=false)
私人字符串管理机构;
@列(nullable=false)
启用私有布尔值;
@列(nullable=false)
字符串fname;
@列(nullable=false)
字符串名称;
@独身癖
列表产品=新的ArrayList();
@OneToMany(mappedBy=“请求者”)
private Set friendRequests=new HashSet();
@OneToMany(mappedBy=“friend”)
private Set friends=new HashSet();
.....
}
@实体
公共类实现了可序列化{
私有静态最终长serialVersionUID=-12799066575787745989L;
@身份证
@许多酮
@JoinColumn(referencedColumnName=“用户名”)
成员请求者;
@身份证
@许多酮
@JoinColumn(referencedColumnName=“用户名”)
会员朋友;
@时态(javax.persistence.TemporalType.DATE)
日期;
@列(nullable=false)
布尔主动;
.....
}

检查是否将空字符串添加到映射到
成员的表中。
由于键“UK_7pn834d04yft1rkvpqf0viuyc”的重复条目“
”=您正在尝试第二次添加相同的值

看看这个:
@Column(name=“username”,nullable=false,unique=true)
私人字符串电子邮件


由于您已将其标记为
唯一
可能您正在尝试第二次将
电子邮件
添加为空字符串,但您对其有一个限制,即无法添加相同的值。

看起来键是由Hibernate生成的,例如使用
hbm2ddl.auto=create

如果这是一个开发/测试环境,您可以向模型中添加@ForeignKey注释,并在重新生成表后查看违反了哪个键(与哪个属性相关)。为了便于调试,值得多写几行


在生产环境中,您可以从mysql表中跟踪密钥。

也许您可以尝试用“deleted=false,insertable=false”注释“requester”和“friend”

您可能正在尝试添加数据库中已经存在的条目(或者,至少它具有相同的id)。您应该使用整数作为下一个数据库的主键。通过这种方式,您可以自动生成主键,这样就不会出现此类问题。

检查为hibernate添加的约束是否与您使用的数据库不匹配。

我不是100%确定,但是我怀疑在id的位置上使用默认值而不是使用自动增量请看这个

我检查了它们的值是否为空,我认为问题在于其中一个集合,尽管这些表中没有值。我有点惊讶于这甚至会运行。您的
友谊
实体似乎有两个
@Id
列,这两个列都映射到您的联接列。此实体需要它自己的主键。@SteveC那么您的建议是什么?您是否在成员实体中使用“用户名”作为ID??这是实体定义和分配注释的问题。什么是UK_7pn834d04yft1rkvpqf0viuyc?关于两个@Id,请尝试删除其中一个,以查看其行为