1

给定一个 Hibernate 域对象,除了搜索它之外,有什么方法可以确定它是否存在(即存在于数据库中)?有什么方法可以使用HIbernate.isObjectLive(domainObj)或者domainObj.amIAlive()可能更有效吗?

我对 Hibernate 比较陌生。如果“否”是答案,我可以接受。提前致谢。

4

2 回答 2

3

Hibernate 只能通过检查数据库来知道一个对象是否根据该定义是“活动的”。你应该用Session.get(object.getClass(), object.getId())看看是不是这样。如果对象不再存在于数据库中,它将返回 null。

请注意,它Session有一个缓存,因此如果对象已经在该缓存中,但同时已从数据库中删除,Session.get(...)则将返回一个引用。出于这个原因,您可能希望Session在进行检查之前获得一个新的。

于 2012-04-24T02:51:03.230 回答
0

我认为最有效的方法是: select o.id from Entity o where o.id=?. 如果这返回空结果,那么那里没有对象。

另一种选择(可能这在并发环境中更可取)是使用乐观锁定,以便对象具有存储在数据库中的版本,并且在保存它时,它将执行以下操作:update Entity set ... where id = ? and version = ?. 如果对象已经过时(更新或删除),它将抛出异常。

但是 session.get() 也可以工作,如果对象应该在会话级缓存中,你只需要在调用之前调用 session.evict(object) 。

于 2012-04-24T04:54:45.197 回答