未找到“HIBERNATE_SEQUENCE”
Posted
技术标签:
【中文标题】未找到“HIBERNATE_SEQUENCE”【英文标题】:"HIBERNATE_SEQUENCE" not found 【发布时间】:2019-10-27 18:41:06 【问题描述】:我有两个表 EmployeeGroup 表和 EmpplyeeDetails 表。 EmployeeGroupTable 具有应该从数据库序列 GroupIdGenerator 生成的主键 groupid。 EmployeeDetails 有两个主键,即 groupid 和employeeid。 Groupid 应与上表相同,并且employeeid 也应具有增量值,例如 1、2、3。 两个表中的这些值都应插入一个事务中。 您能帮我正确映射吗?
我已经尝试过使用不同的生成值和序列生成器组合,但无法将数据保存到表中。
@Entity
@Table(name="EMPLOYEE_GROUP")
public class EmployeeGroup
@Column(name = "GROUP_ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
"groupid-gen")
@Id
@NotNull
@SequenceGenerator(name = "groupid-gen", sequenceName =
"GROUIP_ID_GENERATOR" )
private long groupId;
@OneToMany(mappedBy = "employeeDetail")
private List<EmployeeDetail> employeeDetails;
@Entity
@Table(name = "EMPLOYEE_DETAIL")
@IdClass(EmployeeID.class)
public class EmployeeDetail
@ManyToOne
@JoinColumn(name = "GROUP_ID", insertable=false , updatable=false)
private EmployeeGroup employeeGroup;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
"groupid-gen")
@SequenceGenerator(name = "groupid-gen", sequenceName =
"GROUIP_ID_GENERATOR" )
@Column(name = "GROUP_ID")
@Nonnull
private Long groupId;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Nonnull
@Column(name = "EMPLOYEE_ID")
private Long employeeId;
public class EmployeeId
private Long groupId;
private Long employeeId;
public EmployeeId(final Long groupId, final Long employeeId)
this.groupId = groupId;
this.employeeId = employeeId;
public EmployeeId()
预期的结果是两个表都应该有适当的值。
表员工组
GroupID
1
2
表 EmployeeDetail
GroupId EmployeeId
1 1
1 2
1 3
2 1
2 2
我收到错误消息 错误 o.h.e.jdbc.spi.SqlExceptionHelper - 序列“HIBERNATE_SEQUENCE” 未找到; SQL 语句: 调用 hibernate_sequence 的下一个值 [90036-197] org.springframework.orm.jpa.JpaSystemException:无法准备 陈述;嵌套异常是 org.hibernate.exception.GenericJDBCException:无法准备语句
【问题讨论】:
你用的是什么数据库? 嗨 @SimonMartinelli 我正在使用 Oracle 数据库。 【参考方案1】:您正在混合 ID 生成器策略:
在EmployeeDetail
类中,groupId
有一个 Oracle 序列,但employeeId
有一个 GenerationType.AUTO
这个GenerationType.AUTO
导致了问题。
要么你必须在那里使用 Oracle 序列,要么如果这个 id 来自其他任何地方,你必须删除 @GeneratedValue
。
【讨论】:
我希望employeeId 是一个像1,2,3 这样的自动递增值,并且不想使用Oracle 序列。您建议如何实现这一目标? 也使用 Oracle 序列 嗯,这确实消除了错误,但是我没有达到最终结果,所以可能会提出一个不同的问题以便更好地理解并添加链接。 另一种想法可能是创建 hibernate_sequence 表,但这会给您与 Oracle 序列相同的结果。 我的回答解决了您最初的问题,如果您接受它作为正确答案,我将不胜感激。谢谢以上是关于未找到“HIBERNATE_SEQUENCE”的主要内容,如果未能解决你的问题,请参考以下文章
消息 -“无法读取 hi 值 - 您需要填充表:hibernate_sequence”
如何解决异常:表 'DBNAME.hibernate_sequence' 不存在
GeneratedValue 无法识别现有的 hibernate_sequence
批量插入中的 Postgres 错误:关系“hibernate_sequence”不存在位置 17
得到错误 org.h2.jdbc.JdbcSQLSyntaxErrorException:找不到序列“HIBERNATE_SEQUENCE”; SQL 语句: