2013-06-25 2 views
0

Я новичок в Broadleaf и проводил время с демоверсией Broadleaf, чтобы ознакомиться с каркасом. Я использую текущую стабильную версию Broadleaf - v2.2.Broadleaf - Создать исключение динамического продукта

Моя цель - создать динамическую категорию/продукт без использования консоли администратора. Тем не менее, я получаю TransientObjectException:

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; 
    } 

Может кто-нибудь объяснить, почему я получаю это исключение (так как категория была сохранялось) и как его разрешить?

ответ

1

Я понял, исправить. Изменена строка: catalogService.saveCategory(category); до category = catalogService.saveCategory(category);, и я больше не получаю исключения.

1

Похоже, что список каталогов пуст, в результате чего вы получаете услугу, которая выберет новую категорию. Теперь, хотя вы связали эту новую категорию с продуктом, но эта новая категория не сохраняется в базе данных.

Вам необходимо перенести эту новую категорию сначала, а затем позвонить на продукт. Это должно решить проблему.

И если эта категория сохраняется, как-то спящий режим не может соответствовать этой категории тем, который, по вашему мнению, сохраняется.