gpt4 book ai didi

java - H2 序列在列中生成负数 [JPA Spring]

转载 作者:行者123 更新时间:2023-11-29 10:28:21 24 4
gpt4 key购买 nike

我正在尝试插入到有两个表的 H2 数据库表中

  1. 父级(ID、姓名)
  2. 子项(ID、父项 ID、姓名)

我已经为这两个表定义了序列脚本。

  1. 创建序列parent_seq,从 1 开始,增量为 1;
  2. 创建序列child_seq,从 1 开始递增 1;

我必须为家长和 child 上 bean 课

根:

@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;
}
}

child :

    @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。

现在的问题是,当系统尝试插入 Id 的值时,我得到负值。

输入结果:

父级

id 名称

1 abc

-98 kjd

-97 djhf

-96 djh

我只是想知道为什么它会进入负值。我找不到原因。我调试了整个代码,但仍在努力找出原因。

最佳答案

发生这种情况是因为 JPA 属性未与数据库序列同步。

所以首先使用 JPA hibernate 进行映射:

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;

所以用你的bean/Model类设置allocationSize

父级:

@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 映射未与数据库正确同步。这就是为什么一些随机负数作为数据库中的主键。

关于java - H2 序列在列中生成负数 [JPA Spring],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47896049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com