如何使用Hibernate创建具有嵌套对象的对象?

时间:2011-11-16 21:17:01

标签: java hibernate jpa playframework

我遇到以下异常:

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类是一个只有一个字段的简单实体。

我在这里做错了什么?我如何使这项工作?

2 个答案:

答案 0 :(得分:2)

您是否使用H2作为数据库,db = fs,以便保存到文件系统?您可以尝试删除db目录,以便重新创建它。模式看起来与模型不同步,因为您的错误消息引用了PEOPLE_ID,并且示例中没有“people”字段。

答案 1 :(得分:1)

看看出了什么问题你可以打开hibernate的sql查询输出,看看你是否在保存日志之前保存了标签