Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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创建具有嵌套对象的对象?_Java_Hibernate_Jpa_Playframework - Fatal编程技术网

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

Java 如何使用Hibernate创建具有嵌套对象的对象?,java,hibernate,jpa,playframework,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.sa

我得到以下异常:

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();
Set tagList=getTags();
日志=新日志(内容、用户);
log.addTags(标记列表);
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);
        }
    }
}
@实体
公共类日志扩展模型{
@高球
公共字符串内容;
@许多酮
公共用户作者;
@ManyToMany(cascade=CascadeType.PERSIST)
公共设置标签;
公共日志(字符串内容、用户作者){
this.author=作者;
this.content=内容;
this.tags=新树集();
}
公共无效添加标记(设置标记){
用于(字符串标记:标记){
Tag newTag=Tag.findOrCreateByName(Tag);//因为数据库是空的,所以这个方法只是创建和.save()标记
this.tags.add(newTag);
}
}
}
现在,Tag类是一个只有一个字段的简单实体


我做错了什么?如何做到这一点?

要查看出了什么问题,可以打开hibernate的sql查询输出,然后查看在保存日志之前是否确实保存了标记

要查看出了什么问题,可以打开hibernate的sql查询输出,然后在保存日志之前查看是否确实保存了标记

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

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

您的数据库有些奇怪。异常表示LOG_标记表具有TAG.ID的外键(PEOPLE_ID)。要么需要删除并重新创建表,要么映射有问题。模型的@Id列是否命名为“PEOPLE\u Id”?您的数据库似乎有些奇怪。异常表示LOG_标记表具有TAG.ID的外键(PEOPLE_ID)。要么需要删除并重新创建表,要么映射有问题。模型的@Id列是否命名为“PEOPLE\u Id”?谢谢!我觉得有点傻,没有意识到例外是指人。那是深夜:)谢谢!我觉得有点傻,没有意识到例外是指人。那是深夜:)