繁体   English   中英

休眠多对多双向存储

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM