gpt4 book ai didi

java - Hibernate 没有删除我的对象。为什么?

转载 作者:行者123 更新时间:2023-11-30 05:57:45 27 4
gpt4 key购买 nike

我刚刚设置了一个测试,检查我是否能够使用 Hibernate 将条目插入到我的数据库中。让我发疯的是,Hibernate 实际上并没有删除这些条目,尽管它报告说它们已经消失了!

下面的测试运行成功,但是当我之后检查我的数据库时,插入的条目仍然存在!我什至尝试使用 assert 检查它(是的,我有 -ea 作为 vm 参数)。有人知道为什么条目没有被删除吗?

public class HibernateExportStatisticDaoIntegrationTest {
HibernateExportStatisticDao dao;
Transaction transaction;

@Before
public void setUp(){
assert numberOfStatisticRowsInDB() == 0;
dao = new HibernateExportStatisticDao(HibernateUtil.getSessionFactory());
}

@After
public void deleteAllEntries(){
assert numberOfStatisticRowsInDB() != 0;
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
for(PersistableStatisticItem item:allStatisticItemsInDB()) {
session.delete(item);
}
session.flush();
assert numberOfStatisticRowsInDB() == 0;
}

@Test public void exportAllSavesEntriesToDatabase(){
int expectedNumberOfStatistics = 20;
dao.exportAll(StatisticItemFactory.createTestStatistics(expectedNumberOfStatistics));

assertEquals(expectedNumberOfStatistics, numberOfStatisticRowsInDB());
}

private int numberOfStatisticRowsInDB() {
return allStatisticItemsInDB().size();
}

@SuppressWarnings("unchecked")
private List<PersistableStatisticItem> allStatisticItemsInDB(){
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
transaction = session.beginTransaction();
Query q = session.createQuery("FROM PersistableStatisticItem item");
return q.list();
}
}

控制台充满了

Hibernate: delete from UPTIME_STATISTICS where logDate=? and serviceId=?

但当我检查时,没有任何内容被删除。

最佳答案

我猜这与事务使用不一致有关(请注意,allStatisticItemsInDB() 中的 beginTransaction() 被多次调用,但没有相应的提交)。

尝试以正确的方式管理事务,例如,如下所示:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
for(PersistableStatisticItem item:
session.createQuery("FROM PersistableStatisticItem item").list()) {
session.delete(item);
}
session.flush();
assert session.createQuery("FROM PersistableStatisticItem item").list().size() == 0;
tx.commit();

另请参阅:

关于java - Hibernate 没有删除我的对象。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5235868/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com