Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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 许多关系休眠_Java_Spring_Postgresql_Hibernate - Fatal编程技术网

Java 许多关系休眠

Java 许多关系休眠,java,spring,postgresql,hibernate,Java,Spring,Postgresql,Hibernate,使用Hibernate和PostgreSQL作为数据库,对SpringBoot应用程序进行建模。 需要帮助才能正确地建立许多关系。 班级新闻: @Entity(name = "news") public class News implements Serializable { private Long id; private Date date; private String text; private String author; private Set

使用Hibernate和PostgreSQL作为数据库,对SpringBoot应用程序进行建模。 需要帮助才能正确地建立许多关系。 班级新闻:

@Entity(name = "news")
public class News implements Serializable {
    private Long id;
    private Date date;
    private String text;
    private String author;
    private Set<HashTag> hashTags = new HashSet<HashTag>(0);
    private byte[] image;

    public News() {
    }

    public News(Date date, String text, String author, Set<HashTag> hashTags, byte[] image) {
        this.date = date;
        this.text = text;
        this.author = author;
        this.hashTags = hashTags;
        this.image = image;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "news_id")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Temporal(TemporalType.DATE)
    @DateTimeFormat(pattern = "DD/MM/YYYY")
    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Lob
    @Type(type = "org.hibernate.type.TextType")
    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "news_hashTag",
            joinColumns = @JoinColumn(name = "news_id"),
            inverseJoinColumns = @JoinColumn(name = "hashtag_id"))
    public Set<HashTag> getHashTags() {
        return hashTags;
    }

    public void setHashTags(Set<HashTag> hashTags) {
        this.hashTags = hashTags;
    }

    @Lob
    public byte[] getImage() {
        return image;
    }

    public void setImage(byte[] image) {
        this.image = image;
    }
@Entity(name=“news”)
公共类新闻实现了可序列化{
私人长id;
私人日期;
私有字符串文本;
私有字符串作者;
私有集hashTags=新HashSet(0);
私有字节[]图像;
公共新闻{
}
公共新闻(日期、字符串文本、字符串作者、设置哈希标记、字节[]图像){
this.date=日期;
this.text=文本;
this.author=作者;
this.hashTags=hashTags;
这个图像=图像;
}
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“news\u id”)
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
@时态(TemporalType.DATE)
@日期时间格式(pattern=“DD/MM/YYYY”)
公共日期getDate(){
返回日期;
}
公共作废设置日期(日期){
this.date=日期;
}
@高球
@类型(Type=“org.hibernate.Type.TextType”)
公共字符串getText(){
返回文本;
}
公共void setText(字符串文本){
this.text=文本;
}
公共字符串getAuthor(){
返回作者;
}
公共void setAuthor(字符串编写器){
this.author=作者;
}
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinTable(name=“news\u hashTag”,
joinColumns=@JoinColumn(name=“news\u id”),
inverseJoinColumns=@JoinColumn(name=“hashtag\u id”))
公共集getHashTags(){
返回标签;
}
公共void setHashTags(设置hashTags){
this.hashTags=hashTags;
}
@高球
公共字节[]getImage(){
返回图像;
}
public void setImage(字节[]图像){
这个图像=图像;
}
和类标签:

@Entity(name = "hashTag")
public class HashTag implements Serializable {
    private Long id;

    private String name;
    private String description;
    private Set<News> news = new HashSet<News>(0);

    public HashTag() {
    }

    public HashTag(String name, String description) {
        this.name = name;
        this.description = description;
    }

    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column(name = "hashtag_id")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @ManyToMany(cascade = CascadeType.ALL, mappedBy = "hashTags")
    public Set<News> getNews() {
        return news;
    }

    public void setNews(Set<News> news) {
        this.news = news;
    }
@Entity(name=“hashTag”)
公共类HashTag实现可序列化{
私人长id;
私有字符串名称;
私有字符串描述;
私有集新闻=新哈希集(0);
公共标签(){
}
公共HashTag(字符串名称、字符串描述){
this.name=名称;
this.description=描述;
}
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“hashtag\u id”)
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
@ManyToMany(cascade=CascadeType.ALL,mappedBy=“hashTags”)
公共集getNews(){
返回消息;
}
公共无效设置新闻(设置新闻){
this.news=新闻;
}
当我尝试像这样保存新闻时:

Set<HashTag> hashTags = new HashSet<>();
hashTags.add(new HashTag("HashTag 1");
hashTags.add(new HashTag("HashTag 2");

News news = new News();
news.text = "Some text";
news.author = "Some author";
news.date = new Date();
news.hashTags = hashTags;

newsService.save(news);
@Id
@Column(name = "hashtag_id", nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "HashTagIDGenerator")
@SequenceGenerator(name = "HashTagIDGenerator", sequenceName = "SEQ_HASHTAG_ID")
Set hashTags=new HashSet();
添加(新标签(“标签1”);
添加(新标签(“标签2”);
新闻=新新闻();
news.text=“一些文本”;
news.author=“某作者”;
news.date=新日期();
news.hashTags=hashTags;
保存(新闻);
我得到一个错误:

错误:“news\u id”列中的null值违反了not null约束

让我们看看我们有什么:

在n-m关系的拥有方:

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "news_hashTag",
        joinColumns = @JoinColumn(name = "news_id"),
        inverseJoinColumns = @JoinColumn(name = "hashtag_id"))
public Set<HashTag> getHashTags() {
    return hashTags;
}

玩得开心。

你可以试试hashTags.forEach(h->setNews(新闻))-换句话说,给标签一个对他们的新闻对象的引用,然后填充新闻id栏。尝试过了,没有改变:/@zzheads多么混乱,问题不再是真实的。我必须将问题更改为真实的状态。首先,非常感谢您提供了这样的描述性答案。按照建议更改了所有内容,但没有更改ame错误,有关错误消息,请参阅更新我的post@zzheads等等,您问题中的更新是我更改的结果?您添加了日志信息,对吗?如果日志信息是我建议的结果,它不应该是问题的一部分。请将日志信息作为注释添加到我的答案中。好的,更改后的错误消息您建议:错误消息:WARN 48256---[nio-8080-exec-1]o.h.engine.jdbc.spi.SqlExceptionHelper:SQL错误:0,SQLState:23502 2017-02-12 13:43:24.445错误48256---[nio-8080-exec-1]o.h.engine.jdbc.spi.SqlExceptionHelper:Error:列“news\u id”中的空值违反非空约束ПППППППППППббСббббббббб107@zzheads请提供完整的错误消息。我想知道该消息,具体错误显示4列的值,但第一次插入有5列,第二次插入有3列。我认为这是一个错误,您可以尝试向hibernate报告一个错误吗?现在必须离开。更改了HashTag类-删除了“描述”属性。