Мне удалось заставить спящий режим увеличивать id каждой таблицы на 1, помещая это в каждый класс сущности.hibernate ID increment oracle
@Entity
public class TestObject implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="idgen")
@SequenceGenerator(
name="idgen",
sequenceName="testobject_seq",
allocationSize=1,
initialValue=1
)
У меня есть две таблицы, которые я заполняю данными вручную через Oracle SQL Developer. После того, как я создал таблицы.
<property name="hibernate.hbm2ddl.auto">create</property>
Для двух таблиц с данными в нем я устанавливаю initialValue в то, что мне нужно. Например, тестовая камера таблицы имеет 22 строки с данными. Так что мои аннотации изменение к этому:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="idgen")
@SequenceGenerator(
name="idgen",
sequenceName="testchamber_seq",
allocationSize=1,
initialValue=23
)
Но когда я пытаюсь сохранить новый объект testChamber я получаю эту ошибку.
org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session
Я мог бы спасти мою сущность без проблем, прежде чем я изменил аннотацию, но со старым аннотаций спящего режима увеличивается идентификатор случайным образом. Например, спящий режим дал новый объект идентификатор 60, 61 вместо 23, 24 и так далее ..
Это был мой старый аннотаций:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
- Есть правильный способ, чтобы сказать hibernate, что таблица уже имеет данных в ней, и она должна начинать отсчет определенного числа?
- или как я могу избавиться от «NonUniqueObjectException».
Вы пытались использовать метод flush() перед сохранением из объекта сеанса? – Lucky
Я попробовал, flush() имеет нет эффекта. Также я думаю, что hibernate использует flush() aut omatically, когда вызывается transaction.commit(). –
Хорошо, попробуйте 'session.merge (object)' для сохранения ваших данных. – Lucky