Пусть у меня есть следующее отображение домена класса к унаследованной таблице, используя кэш только для чтения второго уровня, и имеющий переходное поле:Grails/Горм, Cache Disable первого уровня
class DomainObject {
static def transients = ['userId']
Long id
Long userId
static mapping = {
cache usage: 'read-only'
table 'SOME_TABLE'
}
}
У меня есть проблема, ссылки на DomainObject разделяются из-за кэширования первого уровня, и, таким образом, переходные поля пишут друг над другом. Например,
def r1 = DomainObject.get(1)
r1.userId = 22
def r2 = DomainObject.get(1)
r2.userId = 34
assert r1.userId == 34
То есть, r1 и r2 являются ссылками на один и тот же экземпляр. Это нежелательно, я хотел бы кэшировать данные таблицы без обмена ссылками. Есть идеи?
[Редактировать]
Понимание ситуации лучше сейчас, я считаю, что мой вопрос сводится к следующему: Есть ли вообще отключить кэш первого уровня для определенного класса домена, при этом используя кэш второго уровня?
[Редактировать]
Поскольку, как представляется, быть не чистый способ получения этой цели, мы решили вместо того, чтобы перепроектировать вокруг необходимости для него.
Спасибо. Хотя это работает для моего простого примера, это не практический подход, который можно использовать во всем приложении. Я удивлен: стр.266 и стр.276 в «Окончательном руководстве». Grails подтверждает повторное использование экземпляра экземпляра в качестве части кеша первого уровня, но не учитывает сценарий, который я представил. Интересно, есть ли способ отключить кеш первого уровня для определенного объекта домена, возможно, это проблема, и кеш второго уровня будет работать так, как я хочу. –
Я не знаю всех ваших требований, поэтому я не могу помочь, кроме как из моего ответа для этого небольшого примера. Тем не менее, даже пример кажется мне странным ... – fabien7474
Идею здесь можно сравнить с мультисети, которая дополняется (через переходные поля) и преобразуется в нормальный набор: например, [apple, apple, apple, orange, orange] -> [apple ', apple' ', apple' '', orange ', orange' '] –