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;