我试图坚持多个实体。示例代码如下:
public List<String> save(SalesInvoice salesInvoice, List<ClosingStock> closingStockList, Company company,
Receipt receipt) {
log.info("Saving Sales Invoice...");
if (salesInvoice.getSalesChallanId() == null) {
for (ClosingStock closingStock : closingStockList) {
if (existingClosingStock(closingStock.getProduct().getId().toString()) == null) {
em.persist(closingStock);
} else {
}
}
}
em.persist(salesInvoice);
receipt.setSalesInvoiceId(salesInvoice.getId());
em.persist(receipt);
return null;
}
// Edit: Add existingClosingStock method provided in comments
public ClosingStock existingClosingStock(String productId) {
try {
return (ClosingStock) em.createQuery("SELECT cv FROM ClosingStock cv WHERE cv.product.id=:productId") .setParameter("productId", productId).getSingleResult();
} catch (NoResultException e) {
return null;
}
}
好吧,当我执行此查询时,数据不会在数据库中持久存在,但它会显示新插入数据的列表很少次,但数据未保存在数据库中。我在控制台中没有错误。在返回之前放置em.getTransaction().commit();
也不起作用。当我尝试坚持单个实体并放置em.getTransaction().commit();
时,它运行得很好。像这样:
public void save(Location location) {
log.info("Saving Location.");
em.persist(location);
em.getTransaction().commit();
}
我在这里想念的是什么?
答案 0 :(得分:0)
正如this article中所述,坚持只计划entity state transition。插入在刷新期间执行。如果您不提交事务,则不会自动触发刷新。
无论如何,即使您打算阅读数据,也应该始终开始交易。