Я пытаюсь перенести мое приложение из MySql в PostgreSQL.Это просто очень маленькое приложение, над которым я работаю.Всего 5 или 6 таблиц.
Итак, я заново создаю ту же базу данных в postgresql, я узнал, что пользовательское слово зарезервировано для postgress и что первичный ключ должен иметь тип Serial.
Итак, посленекоторые незначительные изменения, Hibernate работал, я могу воссоздать модели непосредственно из БД.
Первая проблема, с которой я столкнулся, это то, что, когда я пытаюсь что-то сохранить, он добавляет 0 как PK.Так как в Java «null» int равно 0 (или, допустим, unassign int равно 0), когда я получаю этот объект из базы данных (для которого PK равен 0), и я создаю новый объект, он выдаёт мне ошибку:
A different object with the same identifier value was already associated with the session
Вот как я хранил сущности.
public Object addOrUpdate(Object item) throws Exception {
sessionFactory.getCurrentSession().saveOrUpdate(item);
return item;
}
После некоторого Google я заменяю saveOrUpdate
на merge
, но, хотя я не получил эту ошибку, все значения, где заменяется первый (который имеет PK 0).Итак, я закончу в базе данных, последний объект был тот, который был сохранен.
Это моя таблица:
id (последний столбец) был создан как BigSerial.
И это модель на Java, созданная Hibernate из моего postgresql
@Id
@Column(name = "id", unique = true, nullable = false)
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
Я использую Java1.8 и PostgreSQL 10.
Так, как я могу продолжать использовать postgresql, но избежать этих проблем?