Последовательность H2 генерирует отрицательный номер в столбце [JPA Spring]

0

Я пытаюсь вставить в таблицы базы данных H2, где есть две таблицы

  1. Родитель (ID, Имя)
  2. Ребенок (ID, ParentID, Имя)

Я уже определил сценарий последовательности для этих двух таблиц.

  1. Создайте последовательность parent_seq с 1 приращением на 1;
  2. Создание последовательности child_seq начинается с 1 приращения на 1;

У меня есть классы для родителей и детей

Корень:

@Entity
public class Root{

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="abstract_generator")
private Long id;

//getter setter for Id
}

родитель:

@Entity
@Access(AccessType.FIELD)
@Table(name="PARENT")
@SequenceGenerator(name="abstract_generator",sequenceName="parent_seq")
@NamedQuery(name="parent.findAll",query="select q from parent q")
public class Parent extends Root{

@Column(name="Name")
private String name;

public void setName(String name){
this.name=name;
}
}

Ребенок:

    @Entity
    @Access(AccessType.FIELD)
    @Table(name="CHILD")
    @SequenceGenerator(name="abstract_generator",sequenceName="child_seq")
    @NamedQuery(name="child.findAll",query="select q from child q")
    public class child extends Root{

    @Column(name="Name")
    private String name;

    @Column(name="ParentId")
    private Long parentId;

    //getter setter for Parentid and name
}

Мой родительский и дочерний классы извлекают идентификатор из корневого и корневого классов, генерируя идентификатор для каждого класса.

Теперь проблема в том, что я получаю отрицательное значение, когда система пытается вставить значение Id.

Результат вступления:

родитель

id Name

1 abc

-98 kjd

-97 djhf

-96 djh

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

Теги:
spring
hibernate
jpa

1 ответ

1
Лучший ответ

Это произошло потому, что свойства JPA не синхронизировались с последовательностью базы данных.

Итак, первая карта с спящим JPA:

Properties prop=new Properties();
prop.put("hibernate.dialect","H2");
prop.put("hibernate.show_sql","true");
prop.put("hibernate.format_sql","true");
prop.put("hibernate.jdbc.batch_size",batchSize);
prop.put("hibernatae.order_inserts","true");
prop.put("hibernatae.order_updates","true");
prop.put("hibernate.jdbc.batch_versioned_data","true");
prop.put("hibernate.id.new_generator_mappings","true");

Второй набор allocationSize, чтобы он мог синхронизироваться с последовательностью:

CREATE SEQUENCE parent_seq START WITH 1 INCREMENT BY 10;

поэтому установите allocSize с помощью компонента bean/Model

родитель:

@Entity
@Access(AccessType.FIELD)
@Table(name="PARENT")
@SequenceGenerator(name="abstract_generator",sequenceName="parent_seq",allocationSize=10)
@NamedQuery(name="parent.findAll",query="select q from parent q")
public class Parent extends Root{

@Column(name="Name")
private String name;

public void setName(String name){
this.name=name;
}
}

Моя проблема заключалась в том, что отображение hibernate не правильно синхронизировалось с базой данных. Поэтому некоторые случайные отрицательные числа поступают в качестве первичного ключа в базе данных.

  • 0
    Мне пришлось добавить атрибут @SequenceGenerator(name = "id_generator", sequenceName = "user_account_id_seq", allocationSize = 10) allocationSize = 10 чтобы мое отображение последовательности отображалось как @SequenceGenerator(name = "id_generator", sequenceName = "user_account_id_seq", allocationSize = 10) соответствующий размеру приращения последовательности, который я создал при create sequence user_account_id_seq start with 1 increment by 10; заявление, чтобы наконец не иметь никаких отрицательных порядковых номеров больше, это используя MariaDB 10.3.7 в 2.0.3.RELEASE версии Spring Boot 2.0.3.RELEASE .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню