小编Ora*_*bat的帖子

Hibernate 3.5 vs 4 IDENTITY_INSERT问题

我们运行Spring 3.1/Hibernate 4/Java 7/Tomcat 7/MSSQL 2008 R2 Web应用程序.我们必须处理遗留数据和归档数据.从存档中提取数据时,我们需要使用原始唯一标识符,以便其他(非存档)记录能够正确地重新水合.这些标识符存储在主键/自动增量字段中.

在此之前,现在,当我们在使用Spring 3.0/3.5休眠,下面的代码工作中插入一个提取的记录回其相应的表(我们已经有变量session,entity以及fullTableName在范围内):

session.doWork( new Work() 
{ 
    @Override
    public void execute(Connection connection) throws SQLException
    {
        PreparedStatement statement = null;
        try
        {
            statement = connection.prepareStatement(String.format("SET IDENTITY_INSERT %s ON", fullTableName));
            statement.execute();

            session.save(entity);

            statement = connection.prepareStatement(String.format("SET IDENTITY_INSERT %s OFF", fullTableName));
            statement.execute();
        }
        finally
        {  /* close the statement */ }
    }
});
Run Code Online (Sandbox Code Playgroud)

就像我提到的,这在Hibernate 3.5中运行良好,但是现在我们已经升级到Hibernate 4,它已经停止工作了.Work和IsolatedWork之间有什么区别吗?

为了解决问题,并避免任何Work接口问题,我们尝试了以下方法:

session.createSQLQuery(String.format("SET IDENTITY_INSERT %s ON", fullTableName)).executeUpdate();
session.save(entity);
session.createSQLQuery(String.format("SET IDENTITY_INSERT %s OFF", fullTableName)).executeUpdate();
Run Code Online (Sandbox Code Playgroud)

但是,这也不起作用.具体来说,抛出的异常是java.sql.SQLException: Cannot …

hibernate transactions implicit identity-insert

7
推荐指数
1
解决办法
2981
查看次数