Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/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 Broadleaf-创建动态产品异常_Java_Spring_Hibernate_Broadleaf Commerce - Fatal编程技术网

Java Broadleaf-创建动态产品异常

Java Broadleaf-创建动态产品异常,java,spring,hibernate,broadleaf-commerce,Java,Spring,Hibernate,Broadleaf Commerce,我是Broadleaf的新手,一直在花时间进行Broadleaf演示项目,以熟悉该框架。 我使用的是当前稳定的阔叶版本——v2.2 我的目标是在不使用管理控制台的情况下创建动态类别/产品。但是,我得到了TransientObject异常: java.lang.IllegalStateException: org.hibernate.TransientObjectException: object is an unsaved transient instance - save the transi

我是Broadleaf的新手,一直在花时间进行Broadleaf演示项目,以熟悉该框架。 我使用的是当前稳定的阔叶版本——v2.2

我的目标是在不使用管理控制台的情况下创建动态类别/产品。但是,我得到了TransientObject异常:

java.lang.IllegalStateException: org.hibernate.TransientObjectException: object is an unsaved transient instance - save the transient instance before merging: org.broadleafcommerce.core.catalog.domain.CategoryImpl
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1386)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1317)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1323)
这就是我尝试创建类别/产品的方式:

private void addProductMetaData(Product product) {
        product.setName("phone A");
        product.setFeaturedProduct(true);
        product.setUrl("/phones/phoneA");
        product.setCanSellWithoutOptions(true);
        product.setManufacturer("manufacturer A");
        product.setActiveStartDate(new Date());
        product.setActiveEndDate(null);
        addMediaInformation(product);

        Category category = retrieveCategory();
        product.setDefaultCategory(category);
        // product.getAllParentCategories().add(category);
        catalogService.saveProduct(product); //**Exception occurs here**

    }

 private Category retrieveCategory() {
        List<Category> categories = catalogService.findCategoriesByName("phones");
        Category category = (CollectionUtils.isEmpty(categories) ? catalogService.createCategory() : categories.get(0));
        if (StringUtils.isEmpty(category.getName())) {
            category.setName("phones");
            category.setUrl("/phones");
            Category parentCategory = catalogService.findCategoriesByName("Primary Nav").get(0);
            category.setDefaultParentCategory(parentCategory);
            category.setActiveStartDate(new Date());
            category.getAllParentCategories().add(parentCategory);
            catalogService.saveCategory(category);
        }
        return category;
    }
private void addProductMetaData(产品){
product.setName(“电话A”);
product.setFeaturedProduct(true);
product.setUrl(“/phones/phoneA”);
product.setCanSellWithoutOptions(true);
产品制造商(“制造商A”);
product.setActiveStartDate(新日期());
product.setActiveEndDate(空);
添加媒体信息(产品);
类别=retrieveCategory();
product.setDefaultCategory(类别);
//product.getAllParentCategories().add(类别);
catalogService.saveProduct(产品);//**此处发生异常**
}
私有类别retrieveCategory(){
列表类别=catalogService.findCategoriesByName(“电话”);
Category Category=(CollectionUtils.isEmpty(categories)?catalogService.createCategory():categories.get(0));
if(StringUtils.isEmpty(category.getName())){
类别。设置名称(“电话”);
category.setUrl(“/phones”);
Category parentCategory=catalogService.findCategoriesByName(“主导航”).get(0);
类别。setDefaultParentCategory(parentCategory);
category.setActiveStartDate(新日期());
category.getAllParentCategories().add(parentCategory);
catalogService.saveCategory(类别);
}
退货类别;
}

有人能解释一下为什么我会遇到这个异常(因为类别已被持久化)以及我如何解决它吗?

在我看来,类别列表是空的,导致调用服务来获取新的类别。现在,虽然您已将此新类别与产品关联,但此新类别未保存在数据库中

您需要先保留此新类别,然后在产品上调用save。这应该可以解决问题


如果这个类别被持久化,那么hibernate就无法将这个类别与您认为是持久化的类别进行匹配

我找到了解决办法。修改行:
catalogService.saveCategory(category)
to
category=catalogService.saveCategory(category)并且我不再得到异常