Я пытаюсь вставить в таблицы базы данных H2, где есть две таблицы
Я уже определил сценарий последовательности для этих двух таблиц.
У меня есть классы для родителей и детей
Корень:
@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
Я просто хотел знать, почему он вводит отрицательную ценность. Я не могу найти причину. Я отлаживал весь код, но все еще стараюсь выяснить причину.
Это произошло потому, что свойства 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 не правильно синхронизировалось с базой данных. Поэтому некоторые случайные отрицательные числа поступают в качестве первичного ключа в базе данных.
@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 Boot2.0.3.RELEASE
.