我遇到以下异常:
Referential integrity constraint violation: "FK779B6FDFD4D56C1: PUBLIC.LOG_TAG FOREIGN KEY(PEOPLE_ID) REFERENCES PUBLIC.TAG(ID)";
这是我正在尝试做的事情:
Set<String> tagList = getTags();
Log log = new Log(content, user);
log.addTags(tagList);
log.save();
我认为理解错误(尝试使用对尚未保存的对象的引用来保存对象),但我已经尝试了保存每个对象的顺序的每个组合,似乎没有任何工作。我正在查看Play Framework教程,以创建博客作为参考。这是我的模特课:
@Entity
public class Log extends Model {
@Lob
public String content;
@ManyToOne
public User author;
@ManyToMany(cascade=CascadeType.PERSIST)
public Set<Tag> tags;
public Log(String content, User author) {
this.author = author;
this.content = content;
this.tags = new TreeSet<Tag>();
}
public void addTags(Set<String> tags) {
for (String tag : tags) {
Tag newTag = Tag.findOrCreateByName(tag); //since the DB is empty, this method is simply creating and .save()'ing tags
this.tags.add(newTag);
}
}
}
现在Tag类是一个只有一个字段的简单实体。
我在这里做错了什么?我如何使这项工作?
答案 0 :(得分:2)
您是否使用H2作为数据库,db = fs,以便保存到文件系统?您可以尝试删除db目录,以便重新创建它。模式看起来与模型不同步,因为您的错误消息引用了PEOPLE_ID,并且示例中没有“people”字段。
答案 1 :(得分:1)
看看出了什么问题你可以打开hibernate的sql查询输出,看看你是否在保存日志之前保存了标签