小编fel*_*gdr的帖子

JPA GenerationType.AUTO没有考虑具有自动增量的列

我有一个表与一个简单的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类型应该使用自动增量行为,所以我不知道为什么不工作.

更新:

我花了一些时间,但我能够准确理解发生了什么.

我正在使用具有以下行为的旧数据库:

  • MSSQL:id生成使用表IDENTITY
  • ORACLE:id生成使用触发器.触发器查询并更新存储所有"下一个ID"的自定义表.该表称为SEQ.

以下是使用一些id生成策略的结果:

  • AUTO:在MSSQL中不起作用,如上所述
  • IDENTITY:在MSSQL中有效,但Oracle不支持
  • "native":在MSSQL中工作但在ORACLE中失败.它失败了,因为Hibernate激活了它的默认序列策略,它使用了hibernate_sequences.nextval.由于这是一个传统应用程序从SEQ表(上述)的值和hibernate_sequences 不同步(SEQ的该特定的表值是在6120,和hibernate_sequences'为1,因为它没有使用到现在为止,预计).

所以我需要弄清楚的是将该实体配置为: …

java database sql-server hibernate jpa

10
推荐指数
2
解决办法
2万
查看次数

Arquillian with Wildfly 8.0.0.Final Managed not working

我一直在使用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)

jboss-arquillian wildfly

3
推荐指数
1
解决办法
4609
查看次数

标签 统计

database ×1

hibernate ×1

java ×1

jboss-arquillian ×1

jpa ×1

sql-server ×1

wildfly ×1