2012-06-25 1 views
1

У меня есть объект JPA/Hibernate, который использует составной ключ в качестве первичного ключа. Я пытаюсь прочитать объект из базы данных и сделать обновление.JPA/Hibernate - идентификатор экземпляра x был измененным исключением

Допустим, что первичный ключ (id и name) и следующие строки существуют в базе данных.

1 john London 
2 bob Birmingham 
3 Dave Kent 

Если я загружаю объект с помощью ключа (1, john), тогда все работает нормально. Если я загрузить его, используя тот же первичный, но с разницей при помощи (1, John), то я получаю следующее исключение:

org.hibernate.HibernateException: identifier of an instance of Document was altered from com.myPck.test1.documentsPK[ Id=1, msgOwner=john ] to com.myPck.test1.documentsPK[ Id=1, msgOwner=John ]; 

После того как я загрузить строку я бы обновить его с помощью JPQL, но я не обновлять какие-либо из столбцы первичного ключа. Интересно, если я ищу строку, которая не существует, я не получаю это исключение. Это происходит только в том случае, если я ищу строку, которая существует, но случай, используемый для ключа, отличается от того, что действительно находится в базе данных.

Что может быть причиной этого и как его решить?

Благодаря

+0

mysql? (еще несколько символов, просто игнорируйте) – esej

ответ

2

Вы можете разместить код для соединения ключа класса, который вы используете. Я предполагаю, что у вас есть плохо реализованный метод equals и hashCode в составном классе первичного ключа.

+0

Спасибо - Вы были правы. Проблема была связана с логином в методе квадов. Метод equals() использовался для сравнения строки вместо equalsIgnoreCase(). – ziggy

Смежные вопросы