Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/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 Spring jpa hibernate插入OneToMany_Java_Spring_Hibernate_Rest_Jpa - Fatal编程技术网

Java Spring jpa hibernate插入OneToMany

Java Spring jpa hibernate插入OneToMany,java,spring,hibernate,rest,jpa,Java,Spring,Hibernate,Rest,Jpa,我正在尝试在表中插入数据(OneToMany)。我有两张桌子(好的,分类) 还有一个: @Entity @Table(name = "category_of_products") public class Category implements Serializable { @OneToMany(mappedBy = "category", fetch = FetchType.LAZY, cascade = { CascadeType.P

我正在尝试在表中插入数据(OneToMany)。我有两张桌子(好的,分类)

还有一个:

    @Entity
    @Table(name = "category_of_products")
    public class Category implements Serializable {

    @OneToMany(mappedBy = "category", fetch = FetchType.LAZY, cascade = {
            CascadeType.PERSIST, CascadeType.REFRESH })
    private List<Good> goods;

    @JsonManagedReference
    public List<Good> getGoods() {
        return goods;
    }
    //getter, setters ommited
他们没有在我的表中插入任何内容

Hibernate: select category0_.id as id1_0_0_, category0_.name as name2_0_0_ from category_of_products category0_ where category0_.id=?
Hibernate: select goods0_.category_id as category7_0_0_, goods0_.id as id1_1_0_, goods0_.id as id1_1_1_, goods0_.category_id as category7_1_1_, goods0_.description as descript2_1_1_, goods0_.name as name3_1_1_, goods0_.price as price4_1_1_, goods0_.quantity as quantity5_1_1_, goods0_.short_description as short_de6_1_1_ from goods goods0_ where goods0_.category_id=?
方法persist也不起作用(分离实体异常)

道的例子

public Category saveOrUpdate(Category category) {
        if (category != null) {
            em.merge(category);
        }
        return category;
        }
        public void add(Category category) {
           em.persist(category);
        }

请给我一个提示,我做错了什么?

这可能是一个测试解决方案,它可以根据您的测试进行演变:

有两件事要做:

  • 将您的
    CascadeType.PERSIST
    更改为
    CascadeType.CASCADE\u ALL
    以不必处理级联问题(此解决方案工作后,您可以回滚此问题)
  • Category
    类中添加一个
    addGood(Good Good)
    ,并在
    Good
    类中添加一个
    Category
    的setter(如果尚未存在)。您必须管理双向关系,将
    Good
    连接到
    Category
    并将
    Category
    连接回
    Good
  • addGood
    方法如下:

    public void addGood(Good good) {
     this.goods.add(good);
     good.setCategory(this);
    }
    

    我已经试过了。。java.lang.IllegalStateException:正在合并同一实体[ua.internetshop.model.Good#1]的多个表示形式。独立:[ua.internetshop.model。Good@7842bec5]; 独立:[ua.internetshop.model。Good@1e897800]至少有一次失败。em.merge操作返回的对象与作为参数传递的对象不同。因此,您应该将其替换为category=em.merge(category);。但我认为这并不能解决您的问题。另外,我希望您清楚地知道,当您调用merge时,hibernate不会执行查询。这只会更新在提交时将持久化到数据库的内部表示。那么,您是否100%确定在提交后检查了日志。问题是:当类别为空,并且我试图添加一些产品时,一切都正常。但是,当我在caterory中至少有一个产品,并尝试添加新产品时,hibernate会在新产品上更新以前的产品,而不是插入新产品。感谢您的回复,但它仍然不起作用。。当我调试时,我两边都有合适的对象,请看下面的链接:@oki你能不能像你做的那样做一个屏幕截图,但我想看看该类别商品的java ID。在category和新创建的Good id中展开goods元素。如果我理解正确,您的意思是:事实上,在右边列value中的debug面板中,您的对象和JVM id是这样的Good(id=117)。这就是我的意思很好,但除此之外,我需要你扩展你选择的列表的元素?
    public Category saveOrUpdate(Category category) {
            if (category != null) {
                em.merge(category);
            }
            return category;
            }
            public void add(Category category) {
               em.persist(category);
            }
    
    public void addGood(Good good) {
     this.goods.add(good);
     good.setCategory(this);
    }