我们将JPA提供程序从EclipseLink更改为Hibernate 4.1.3。尝试使用生成的ID持久保存实体时出现问题。这会出现以下错误:
JdbcSQLException: Column "NEXTVAL" not found; SQL statement: select nextval for SCHEMA.ID_SEQ_GENERATOR
实体的序列如下所示:
@Id
@SequenceGenerator(name = "ID_GENERATOR", initialValue = 100000, allocationSize = 1, sequenceName = "ID_SEQ_GENERATOR")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")
@Column(name = "ID", nullable = false)
public Long getId() {
return this.id;
}
我尝试更改'strategy = GenerationType.IDENTITY',但它没有效果。
有什么建议吗?
答案 0 :(得分:0)
我发现根据使用的环境使用了不同的数据库。使用的方言(当前)总是相同的,即使它应该根据执行代码的服务器而改变。 (正确的方言实际上是首先加载的,但是它会被替换,因为spring决定使用另一个用@Configuration注释的类。我认为使用profile会让我超过这个,虽然仍在使用这个......)
我发现这个链接帮助我走上了正确的轨道: http://techmagik.blogspot.fi/2012/07/sequence-support-in-jpa-for-db2-zos.html.html
发现H2已被使用,我将SQL更改为:
"NEXT VALUE FOR " + sequenceName
所以实际的问题是加载正确的方言(因为' Luca Basso Ricci'暗示)。方言是针对DB2(总是),在某些情况下应该是针对H2的。出于某种原因,当提供者被更改时,这个问题就显现出来,因此跟踪正确的原因有点困难。