Проблема ORM после обновления до ColdFusion 2018 с версии 11 - PullRequest
0 голосов
/ 02 января 2019

Мы перешли с ColdFusion 11 на ColdFusion 2018, и теперь ORM нарушает метод EntitySave, и мы получаем сообщение об ошибке ниже.

Сообщение об ошибке - Основная причина этого исключения: coldfusion.orm.hibernate.HibernateSessionException: пакетное обновление вернуло неожиданное количество строк из-за обновления [0];фактическое количество строк: 0;ожидается: 1.

У нас есть 2 класса с отношением один-ко-многим, таких как Email.cfc (родительский) и EmailItems.cfc (дочерний).Когда мы пытаемся сохранить объект Email.cfc, hibernate также создает запрос UPDATE для EmailItems, и это происходит только с ColdFusion 2018.

Вот определенное свойство в Email.cfc.

<cfproperty name="EmailItems" 
            lazy="true" 
            fieldtype="one-to-many" 
            inverse="true" 
            fkcolumn="EmailID" 
            cfc="EmailItem" 
            singularName="EmailItem" 
            type="struct" 
            structkeycolumn="EmailItemKey" 
            structkeytype="string" 
            cascade="none"
/>

Мы используем инверсию, и она все еще создает запрос UPDATE для дочернего класса 'EmailItems', что является причиной сбоя EntitySave(Email).Все отлично работает с ColdFusion 11.

1 Ответ

0 голосов
/ 03 января 2019

Наконец-то я нашел исправление для этого. Кажется, что свойства inverse="true" не работают с WITH cf2018 так же, как с CF2011.

После проведенного исследования выяснилось, что по умолчанию добавляется каскадное свойство в тег <cfproperty> для отношения один-ко-многим, значение которого равно UPDATE, что означает, что для любого потерянного дочернего объекта он пытается обновить, пока этот объект не ' не существует на уровне базы данных.

Таким образом, при добавлении cascade="save-update" в мой тег <cfproperty> для отношения «многие ко многим» это решает проблему, поскольку теперь он пытается ВСТАВИТЬ вместо ОБНОВЛЕНИЯ для любого потерянного дочернего объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...