@Immutable vs @Entity (mutable=false) в спящем режиме
в чем разница между этими двумя, если таковые имеются? Должен ли 1 или оба использоваться на объекте?
2 ответов
на сущности практически нет никакой разницы. @Immutable
получает приоритет (то есть, если у вас есть сущность, которая помечается как @Immutable
и @Entity(mutable = "true")
он будет рассматриваться как неизменяемый).
@Immutable
также может использоваться в коллекциях с почти такой же семантикой. Подробности здесь
на org.hibernate.annotations.Entity
аннотация устарела и будет удалена в будущем выпуске Hibernate.
следовательно, вы всегда должны использовать @Immutabale
аннотация, если у вас есть объекты, которые никогда не должны быть изменены Hibernate.
как я объяснил в в этой статье, the @Immutable
аннотация сообщает Hibernate загружать объекты в режиме только для чтения, поэтому изменения сущности не могут быть отслежены грязные проверка механизм.
@Immutable
субъекты все еще могут быть обновлены через JPQL или критерии API массовое обновление запросов.
чтобы убедиться @Immutabale
сущности никогда не изменяются для запросов массового обновления, начиная с Hibernate 5.2.17 и далее, вы можете установить следующее свойство конфигурации:
<property
name="hibernate.query.immutable_entity_update_query_handling_mode"
value="exception"
/>
С этим свойством на месте запрос массового обновления в конечном итоге вызовет исключение, и обновление сущности будет предотвращено.