Сначала вам необходимо определить, является ли это DDL или DML. Если вы не знаете, то я рекомендую установить hibernate.show_sql = true , чтобы зафиксировать ошибочное утверждение.
Если это DDL, то, скорее всего, Hibernate обновит схему для вас, и вы захотите дополнительно настроить параметр hibernate.hbm2ddl.auto , чтобы либо " update ", либо " none ", в зависимости от того, используете ли вы фактическую базу данных или символическую ссылку (только для чтения), соответственно. Вы также можете использовать " validate " вместо none.
Если это DML, то я бы сначала определил, вносит ли ваш код по какой-то причине изменения в экземпляр, который все еще присоединен к активной сессии Hibernate. Если это так, то последующее чтение может вызвать сброс этих изменений без явного сохранения объекта (Grails?). Если это так, рассмотрите возможность удаления экземпляра, вызывающего сброс (или использования вместо этого транспортных объектов).
Возможно, вы используете какие-либо аспекты или события жизненного цикла Hibernate для обеспечения аудита объектов? Это также может привести к доступу только для чтения, что приведет к запуску вставки или обновления.
Может оказаться, что вам нужно предоставить альтернативные сопоставления классу-нарушителю, если в игру вступает возможность обновления поля, но код делает все именно так, как вы хотите (это маловероятно; 0). Если вы находитесь в мире аннотаций, это может быть сложно. Если вы работаете с hbm.xml, то обеспечить альтернативное сопоставление проще.