![](/img/trans.png)
[英]Hibernate Bi-Directional Many to Many association creates duplicates
[英]Hibernate Many to Many Bi-Directional Storing
我跟着Mkyong的(很多到大量的实例-联接表+额外的列)从mkyong
当我运行该应用程序时,我能够存储许多值
库存多对多双向存储:
session.beginTransaction();
Category category1 = new Category("CONSUMER", "CONSUMER COMPANY");
//new category, need save to get the id first
session.save(category1);
Stock stock = new Stock();
stock.setStockCode("7052");
stock.setStockName("PADINI");
StockCategory stockCategory = new StockCategory();
stockCategory.setStock(stock);
stockCategory.setCategory(category1);
stockCategory.setCreatedDate(new Date());
stockCategory.setCreatedBy("system");
stock.getStockCategories().add(stockCategory);
session.save(stock);
session.getTransaction().commit();
它存储类别,并将其ID与Stock一起使用。 它正在插入三个表。 令人担忧的很好。它生成sql如下
Hibernate:
insert
into
hibernateLearning.category
(`DESC`, NAME)
values
(?, ?)
Hibernate:
insert
into
hibernateLearning.stock
(STOCK_CODE, STOCK_NAME)
values
(?, ?)
Hibernate:
insert
into
hibernateLearning.stock_category
(CREATED_BY, CREATED_DATE, CATEGORY_ID, STOCK_ID)
values
(?, ?, ?, ?)
分类中的许多双向存储
我修改了代码,并尝试存储来自Category的股票值,如下所示:
session.beginTransaction();
// Saved the Stock first
Stock stock = new Stock();
stock.setStockCode("7052");
stock.setStockName("PADINI");
session.save(stock);
// Saving the Category with Stock
Category category1 = new Category("CONSUMER1", "CONSUMER COMPANY");
StockCategory stockCategory = new StockCategory();
stockCategory.setStock(stock);
stockCategory.setCategory(category1);
stockCategory.setCreatedDate(new Date());
stockCategory.setCreatedBy("system");
category1.getStockCategories().add(stockCategory);
session.save(category1);
session.getTransaction().commit();
此代码生成以下查询:
Hibernate:
insert
into
hibernateLearning.stock
(STOCK_CODE, STOCK_NAME)
values
(?, ?)
Hibernate:
insert
into
hibernateLearning.category
(`DESC`, NAME)
values
(?, ?)
我先保存库存,然后将其用于类别。 此代码创建两个表并插入值。 但是缺少联接表(StockCategory)。 我想知道这段代码在哪里错了?
错误的是,您仅修改了双向关联的一侧,而在第二个示例中,修改后的一侧是反侧(即具有mappedBy
属性的那一侧)。 休眠忽略相反的一面。 对于Hibernate而言,重要的是所有者方面。 因此很正常,并且期望该关联不会保存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.