我有一个表与一个简单的int id列在SQL Server中具有标识自动增量.
实体的Id用@Id和注释@GeneratedValue
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", length = 4, precision = 10, nullable = false)
private Integer id;
Run Code Online (Sandbox Code Playgroud)
在SQL Server中,该列已正确设置为Identity with Seed并且Increment等于1.
当我尝试持久化该实体的实例时,Hibernate尝试查询hibernate_sequence表以获取ID值.由于我没有在我的架构中创建该表,我收到一个错误:
could not read a hi value: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'MySchema.hibernate_sequence'
如果我将生成类型更改为IDENTITY,一切都按预期工作
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", length = 4, precision = 10, nullable = false)
private Integer id;
Run Code Online (Sandbox Code Playgroud)
我无法以这种方式更改它,因为我的应用程序将在MS SQL和ORACLE上运行,后者不支持自动增量列.
据我所知,如果底层数据库对它有支持,AUTO类型应该使用自动增量行为,所以我不知道为什么不工作.
更新:
我花了一些时间,但我能够准确理解发生了什么.
我正在使用具有以下行为的旧数据库:
以下是使用一些id生成策略的结果:
所以我需要弄清楚的是将该实体配置为: …
我一直在使用arquillian和jboss-as-7.1.1.Final一段时间了.
我想开始使用wildfly 8.0.0.Final,但我无法让它工作.
我只更改了我的pom.xml和arquillian.xml.
这是我的"属性":
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.joda.time>2.1</version.joda.time>
<version.junit>4.11</version.junit>
<version.mockito>1.9.5</version.mockito>
<version.jacoco>0.6.0.201210061924</version.jacoco>
<version.arquillian.bom>1.1.3.Final</version.arquillian.bom>
<version.arquillian.drone.bom>1.3.0.Final</version.arquillian.drone.bom>
<version.arquillian.jacoco>1.0.0.Alpha6</version.arquillian.jacoco>
<version.arquillian.persistence>1.0.0.Alpha6</version.arquillian.persistence>
<version.commons.collections>3.2.1</version.commons.collections>
<version.commons.io>2.4</version.commons.io>
<version.wildfly>8.0.0.Final</version.wildfly>
<!-- <version.jbpm.3>3.3.1.GA</version.jbpm.3> -->
</properties>
Run Code Online (Sandbox Code Playgroud)
相关的maven配置文件声明如下所示:
<profile>
<id>arquillian-wildfly-managed</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>process-test-classes</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-dist</artifactId>
<version>${version.wildfly}</version>
<type>zip</type>
<overWrite>false</overWrite>
<outputDirectory>target</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<systemPropertyVariables>
<arquillian.launch>wildfly-as-managed</arquillian.launch>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- Ignore/Execute plugin execution -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<!-- …Run Code Online (Sandbox Code Playgroud)