我正在关注here的教程,有一部分我不明白。
4。运行它 - 案例1
session.beginTransaction(); Stock stock = new Stock(); stock.setStockCode("7052"); stock.setStockName("PADINI"); Category category1 = new Category("CONSUMER", "CONSUMER COMPANY"); session.save(category1); StockCategory stockCategory = new StockCategory(); stockCategory.setStock(stock); stockCategory.setCategory(category1); stockCategory.setCreatedDate(new Date()); //extra column stockCategory.setCreatedBy("system"); //extra column stock.getStockCategories().add(stockCategory); session.save(stock); session.getTransaction().commit();
时创建了库存和类别1之间的关联
stockCategory.setStock(stock); stockCategory.setCategory(category1);
然后,为什么我们仍然需要
stock.getStockCategories().add(stockCategory);
谢谢!
答案 0 :(得分:2)
您并不是绝对需要它来使数据库满意,但不这样做会使对象图不一致。
因此,例如,如果您通过此操作返回库存及其类别,并且客户端代码(UI)遍历库存类别以显示系统的新状态,则会显示新创建的库存没有任何类别,这是错误的。
答案 1 :(得分:1)
严格地说,hibernate不需要添加来持久保存对象。如果您要明确保存库存类别,那么关系将保持不变。但是,您只保存库存对象。因此,库存类别需要在集合中,以便hibernate可以找到它。
注意类别集合上的CascadeType.ALL。这意味着在保存时,hibernate应该查看此集合中的项目并将其全部保存。由于这种节省,股票足以让hibernate找到并保存股票类别并保持关系。如果你没有将项添加到集合中,hibernate将无法找到它,因此除非你明确保存了StockCategory,否则不会保存关系。
正如其他答案中所提到的,通常认为保持对象图与持久状态一致是一种好习惯,以避免在不同时间填充的内容不同的细微错误。