【问题标题】:Hibernate Many to Many Bi-Directional Storing休眠多对多双向存储
【发布时间】:2013-12-25 05:26:49
【问题描述】:

我按照 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
        (?, ?, ?, ?)

Many Many Bi-Directional storage from Category :

我修改了代码并尝试存储 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)。 我想知道这段代码哪里错了?

【问题讨论】:

    标签: java mysql sql hibernate


    【解决方案1】:

    问题在于您只修改了双向关联的一侧,而在第二个示例中,修改后的一侧是相反的一侧(即具有mappedBy 属性的一侧)。 Hibernate 忽略了反面。对 Hibernate 来说重要的是所有者方面。因此,没有保存关联是正常的,并且可以预期。

    【讨论】:

    • 我可以知道,我必须对存储值进行哪些代码更改?谢谢。
    • Stock 和 Category 类都具有 mappedBy 属性。
    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多