hibernate - Grails/GORM,禁用一级缓存

标签 hibernate grails grails-orm ehcache

假设我有以下域类映射到旧表,利用只读二级缓存,并具有 transient 字段:

class DomainObject {
 static def transients = ['userId']

 Long id
 Long userId

 static mapping = {
  cache usage: 'read-only'
  table 'SOME_TABLE'
 }
}

我有一个问题,由于一级缓存,对 DomainObject 的引用正在被共享,因此 transient 字段正在相互写入。例如,

def r1 = DomainObject.get(1)
r1.userId = 22

def r2 = DomainObject.get(1)
r2.userId = 34

assert r1.userId == 34

也就是说,r1 和 r2 是对同一实例的引用。这是不可取的,我想缓存表数据而不共享引用。有什么想法吗?

[编辑]

现在更好地了解情况,我相信我的问题可以归结为以下几点:是否有办法在仍然使用二级缓存的同时禁用特定域类的一级缓存?

[编辑]

由于似乎没有干净的方法来实现此目标,因此我们选择围绕其需求进行重新设计。

最佳答案

请忽略我之前的回答,我没有完全理解您的问题。

但是,以下内容将起作用(已测试代码):

def r1 = DomainObject.get(1)
r1.userId = 22
r1.discard() //BE CAREFUL WITH THIS, YOU MIGHT END UP WITH a LazyInitializationException

def r2 = DomainObject.get(1)
r2.userId = 34

assert r1.userId == 22

关于hibernate - Grails/GORM,禁用一级缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2859396/

相关文章:

java - HibernateDaoSupport 中的 HQL

java - 找不到部署 "war"的子部署 "ear"中命名的持久性单元

grails - 在这种情况下,如何确定域模型?

hibernate - Grails - 按域关系属性排序(使用 createCriteria())

grails - 如何将域对象属性映射到列

java - Spring JPA - org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean 无法转换为 javax.persistence.EntityManagerFactory

mysql - Hibernate 生成交叉连接而不是左连接

grails - 如何在Grails中添加多个数组值

web-services - Grails:公开 LoginController 以进行编程登录

Grails 单向多对多