org.hibernate.PersistentObjectException 多对一关系
Posted
技术标签:
【中文标题】org.hibernate.PersistentObjectException 多对一关系【英文标题】:org.hibernate.PersistentObjectException Many-to-one relationship 【发布时间】:2018-04-16 13:04:54 【问题描述】:运行应用程序时,我从 MockData 收到 org.hibernate.PersistentObjectException 错误。这是什么原因造成的?我的级联类型错了吗?
org.hibernate.PersistentObjectException:分离的实体传递给 坚持
产品是在分类之后创建和添加的,那么分类应该存在吗?
Product.java
@Entity
@Data
@Table(name = "product")
@JsonIgnoreProperties("hibernateLazyInitializer", "handler")
public class Product
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "manufacturer")
private String manufacturer;
@Column(name = "price")
private double price;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "category_id")
private Category category;
public Product(String name, String manufacturer, double price, Category category)
this.name = name;
this.manufacturer = manufacturer;
this.price = price;
this.category = category;
public Product()
Category.java
@Entity
@Data
@Table(name = "category")
public class Category
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "category", cascade = CascadeType.ALL)
private List<Product> products;
public Category(String name)
this.name = name;
public Category()
MockData.java
@Component
class MockData
private final ProductRepository productRepository;
private final CategoryRepository categoryRepository;
@Autowired
public MockData(ProductRepository productRepository, CategoryRepository categoryRepository)
this.productRepository = productRepository;
this.categoryRepository = categoryRepository;
loadData();
private void loadData()
Category IT = new Category("IT");
Category beauty = new Category("Beauty");
Category food = new Category("Food");
categoryRepository.save(IT);
categoryRepository.save(beauty);
categoryRepository.save(food);
Product computer = new Product("Computer", "Dell", 5000, IT);
Product computer2 = new Product("Computer2", "HP", 5000, IT);
Product eyeliner = new Product("Eyeliner", "Chanel", 100, beauty);
Product hamburger = new Product("Angus", "Burger King", 100, food);
productRepository.save(computer);
productRepository.save(computer2);
productRepository.save(eyeliner);
productRepository.save(hamburger);
【问题讨论】:
我已经在这里回答了类似的问题:***.com/questions/49554459/…我猜?尝试初始化您的products
集合
Detached entity passed to persist error的可能重复
【参考方案1】:
将 mockdata 更改为以下解决了问题:
@Component
class MockData
private final ProductRepository productRepository;
private final CategoryRepository categoryRepository;
@Autowired
public MockData(ProductRepository productRepository, CategoryRepository categoryRepository)
this.productRepository = productRepository;
this.categoryRepository = categoryRepository;
loadData();
private void loadData()
Category IT = new Category("IT");
Category beauty = new Category("Beauty");
Category food = new Category("Food");
Product computer = new Product("Computer", "Dell", 5000, IT);
Product computer2 = new Product("Computer2", "HP", 5000, IT);
Product eyeliner = new Product("Eyeliner", "Chanel", 100, beauty);
Product hamburger = new Product("Angus", "Burger King", 100, food);
IT.setProducts(Arrays.asList(computer, computer2));
beauty.setProducts(Collections.singletonList(eyeliner));
food.setProducts(Collections.singletonList(hamburger));
categoryRepository.save(IT);
categoryRepository.save(beauty);
categoryRepository.save(food);
productRepository.save(computer);
productRepository.save(computer2);
productRepository.save(eyeliner);
productRepository.save(hamburger);
产品在保存之前被创建并添加到类别中。
【讨论】:
以上是关于org.hibernate.PersistentObjectException 多对一关系的主要内容,如果未能解决你的问题,请参考以下文章