Hibernate: Как исправить «идентификатор экземпляра, измененного с X на Y»? - PullRequest
51 голосов
/ 14 ноября 2010
org.hibernate.HibernateException: identifier of an instance 
of org.cometd.hibernate.User altered from 12 to 3

фактически, моя таблица user действительно должна динамически менять свое значение, мое Java-приложение является многопоточным. Есть идеи как это исправить?

Ответы [ 15 ]

0 голосов
/ 08 октября 2018

Это проблема в вашем методе обновления.Просто сохраните изменения, прежде чем сохранить изменения, и все будет в порядке.Если вы используете сопоставление между DTO и классом Entity, то делайте это перед сопоставлением.У меня был User Object, пытающийся изменить его Location, Location был FK в таблице User.Я решил эту проблему с

@Transactional
public void update(User input) throws Exception {

    User userDB = userRepository.findById(input.getUserId()).orElse(null);
    userDB.setLocation(new Location());
    userMapper.updateEntityFromDto(input, userDB);

    User user= userRepository.save(userDB);
}  
0 голосов
/ 25 июля 2018

Столкнулся с той же проблемой. У меня была ассоциация между 2 бобами. В бине A я определил тип переменной как Integer, а в бине B я определил ту же переменную, что и Long Я изменил их обоих на Integer. Это решило мою проблему.

0 голосов
/ 22 июня 2017

Это старый вопрос, но я собираюсь добавить исправление для моей конкретной проблемы (Spring Boot, JPA с использованием Hibernate, SQL Server 2014), поскольку оно не совсем соответствует другим ответам, включенным здесь:

У меня был внешний ключ, например my_id = '12345', но значение в указанном столбце было my_id = '12345'. В конце у него было дополнительное пространство , которое спящему не нравилось. Я удалил пробел, исправил часть моего кода, которая позволяла это дополнительное пространство, и все работает отлично.

0 голосов
/ 21 августа 2015

Если вы используете Spring MVC или Spring Boot, попробуйте избежать: @ ModelAttribute ("user") в одном контроллере и в другом контроллере model.addAttribute ("user", userRepository.findOne (someId);

Эта ситуация может привести к такой ошибке.

0 голосов
/ 17 июня 2015

В моем случае это было из-за того, что свойство объекта long было длинным, а int в xml сопоставления, это исключение должно быть более понятным

...