有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate/JPA双向级联存储更新

我试图为两个实体(新闻和标签)建立多对多的双向关系

但当我试图保存或更新新闻(已设置)时,它总是以某种方式保存一组新的标记,即使标记中已经填充了id

我的注释有问题吗

新闻。爪哇

    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    @Column(name = "NEWS_ID")
    public Long getId() {
        return id;
    }

    @ManyToMany(fetch = FetchType.LAZY,  cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @Cascade( org.hibernate.annotations.CascadeType.SAVE_UPDATE )
    @JoinTable(name = "NEWS_TAGS", joinColumns = @JoinColumn(name = "NEWS_ID"), inverseJoinColumns = @JoinColumn(name = "TAG_ID"))
    public Set<Tag> getTags() {
        return tags;
    }

标签。爪哇

    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    @Column(name = "TAG_ID")
    public Long getId() {
        return id;
    }

    private Collection<News> news;

    @JsonIgnore
    @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "tags")
    public Collection<News> getNews() {
        return news;
    }

新闻刀

public void save(News news){
         this.hibernateSessionFactory.getCurrentSession().saveOrUpdate(news);
    }

我想做的是,当我保存“新闻”时,如果标签存在,相关集将被忽略,如果标签不存在,将插入新的,这是可能的吗

请告知


共 (1) 个答案

  1. # 1 楼答案

    问题是您的对象(标记)没有“连接”。我的意思是,hibernate不知道您的对象,当您试图保存新闻时,hibernate将始终将您的标记视为新对象。在保存或更新并使用此对象之前,请尝试从db获取标记对象