Java 发生PersistenceException:org.hibernate.exception.ConstraintViolationException:无法插入:[models.User]

Java 发生PersistenceException:org.hibernate.exception.ConstraintViolationException:无法插入:[models.User],java,hibernate,playframework,Java,Hibernate,Playframework,我有这个例外!! 这是我的模型课 @Entity public class User extends Model { @OneToMany(mappedBy="email", cascade=CascadeType.ALL) public List<Photo> photo; @Email @Required @Unique public String email; @Required public String

我有这个例外!! 这是我的模型课

@Entity
public class User extends Model {

    @OneToMany(mappedBy="email", cascade=CascadeType.ALL)
    public List<Photo> photo;

    @Email
    @Required
    @Unique
    public String email;

    @Required
    public String passwordHash;

    @Required
    public String education;

    @Required
    public String fname;

    @Required
    public String lname;

    @Required
    public Date dob;

    @Required
    public String gender;

    @Required
    public String country;

    @Required
    public Long phone;

    @Required
    public String status;

    @Required
    public String jobtitle;

    @Required
    public String company;

    @Required
    public String industry;

    @Required
    public Date addDate;

    public String needConfirmation;

public User(String email, String password, String fname,
                String lname, Date dob, String gender, String country,
                Long phone, String status, String education, String jobtitle, String company, String industry) {
        //all initialization here
    }
}

检查实体在持久化/更新时是否缺少任何必填字段。还要检查在DB中的用户表上设置了哪些约束(唯一键、外键、非Null…。

您的
mappedBy
值没有什么意义。它用于双向关联的被动端。在这些情况下,它指向关系另一端的另一个类上的属性。您将它指向
User
类的一个属性。也许你的Photo类有一个
email
属性,但它是
User
类型(我猜不是)。因此,如果这是双向关联,请将
mappedBy
值设置为
Photo
上的属性,该属性具有相应的
@manytone
“back”给
用户。如果它是单向关联,请删除mappedBy,也许可以使用@JoinColumn使用单向一对多的外键映射策略我遇到了相同的问题,通过将关系相关的表示法从
OneToMany
更改为
ManyToMany
解决了这个问题。在我的例子中,Job和Person表之间存在
manytomy
关系,我试图将同一个jobList添加到循环中的多人对象中

问题在于作业实体的Person实体类中使用的注释:

@ManyToMany // Changed from OneToMany to ManyToMany
private List<Job> jobList = new ArrayList<Job>();
@ManyToMany//
私有列表作业列表=新的ArrayList();

尝试按如下方式编辑代码- 在用户模型中

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    public List<Photo> photos;

检查此项以供参考-

您是否也可以显示
照片
类?
mappedBy
值看起来可疑。顺便说一句,要经常尝试的是删除您的数据库并让您的JPA impl再次生成它。我如何允许JPA impl生成我的数据库。@user1405888:我不熟悉Play framework,但这可能会有所帮助:(请参阅
JPA.ddl
-设置,您想将其设置为“创建删除”吗,但决不要在生产中保留此设置,否则将清除生产数据库)。
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    public List<Photo> photos;
    @ManyToOne
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name = "email", nullable = false, insertable = false, updatable = false)
    public User user;