我正在尝试插入H2数据库表,其中有两个表
我已经为这两个表定义了序列脚本。
我必须为父母和孩子的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;
}
}
儿童:
@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
}
我的父类和子类从root获取id,而root类正在为每个类生成id。
现在问题是当系统试图插入Id的值时,我得到负值。
参赛结果:
父
id 名称
1 abc
-98 kjd
-97 djhf
-96 djh
我只是想知道为什么它会输入负值。我找不到原因。我调试了整个代码,但仍然在努力找出原因。
答案 0 :(得分:1)
之所以发生这种情况,是因为JPA Properties没有与数据库序列同步。
首先使用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映射未与数据库正确同步。这就是为什么一些随机负数将成为数据库中的主键。