【发布时间】:2017-09-17 07:06:33
【问题描述】:
我用 Hibernate 5.2 映射了下图
这些是我的实体类:
库存
@Entity
@Table(name = "stock", catalog = "mkyongdb", uniqueConstraints = {
@UniqueConstraint(columnNames = "STOCK_NAME"),
@UniqueConstraint(columnNames = "STOCK_CODE") })
public class Stock implements java.io.Serializable {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "STOCK_ID", unique = true, nullable = false)
private Integer stockId;
@Column(name = "STOCK_CODE", unique = true, nullable = false, length = 10)
private String stockCode;
@Column(name = "STOCK_NAME", unique = true, nullable = false, length = 20)
private String stockName;
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.REFRESH})
@JoinTable(name = "stock_category", catalog = "mkyongdb", joinColumns = {
@JoinColumn(name = "STOCK_ID", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "CATEGORY_ID",
nullable = false, updatable = false) })
private Set<Category> categories = new HashSet<>();
//Getter and Setter
}
类别
@Entity
@Table(name = "category", catalog = "mkyongdb")
public class Category implements java.io.Serializable {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "CATEGORY_ID", unique = true, nullable = false)
private Integer categoryId;
@Column(name = "NAME", nullable = false, length = 10)
private String name;
@Column(name = "[DESC]", nullable = false)
private String desc;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "categories", cascade = {CascadeType.MERGE, CascadeType.REFRESH})
private Set<Stock> stocks = new HashSet<>();
//Getter and Setter
}
一切正常。
我需要做的只是将类别列表添加到股票中。我不想修改Stock 实体,只是在stock_category 表中添加或删除类别。
这是我的服务:
@Override
@Transactional(rollbackFor = StockException.class)
public void addCategoriesToStock(Set<Category> categories, Stock stock) throws StockException{
stock = sessionFactory.getCurrentSession().get(Stock.class, stock.getCodStock());
stock.setCategories(categories);
sessionFactory.getCurrentSession().update(stock);
sessionFactory.getCurrentSession().flush();
}
这是对服务的测试
@Test
public void testAddCategoriesStock() throws Exception {
Stock newValues = new Stock();
newValues.setStockId(1);
Category category = new Category();
category.setCategoryId(13);
dao.addCategoriesToStock(new HashSet<>(Arrays.asList(category)), newValues);
List<Stock> stocks = dao.getAllStockeByCategoriesCriteria(category);
for (Stock stock : stocks) {
System.out.println(stock);
}
}
测试运行良好,没有错误,但是在浏览与类别“13”(getAllStockeByCategoriesCriteria)关联的股票时,它没有给我带来任何股票。那么之前执行的操作就不起作用了。
如何添加或删除类别?
【问题讨论】:
-
应该可以。请发布
getAllStockeByCategoriesCriteria实现并解释您如何在测试中管理事务(可能未提交更改)?
标签: java hibernate jpa orm jpa-2.0