使用Hibernate和SQL Server 2008时出现问题。

11 浏览
0 Comments

使用Hibernate和SQL Server 2008时出现问题。

我在使用Hibernate和SQL Server 2008时遇到了问题。当我尝试将一个对象保存到数据库时,Hibernate抛出了以下错误:

无法检索快照:com.my.MyClass
原因是:com.microsoft.sqlserver.jdbc.SQLServerException: 无效的对象名称`'emanagement.patient_visit'`。

用户在数据库中具有选择、插入和更新的权限,所以我排除了这个问题。

生成的SQL如下:

select
        patientvis_.account_number,
        patientvis_.status as status1_,
        patientvis_.cpt_code as cpt3_1_,
        patientvis_.locked as locked1_,
        patientvis_.state as state1_,
        patientvis_.userid as userid1_ 
    from
        emanagement.patient_visit patientvis_ 
    where
        patientvis_.account_number=?

如果我在SQL Server中运行上述SQL,它会显示无效的对象名称emanagement.patient_visit,但是如果我手动添加"dbo" emanagement.dbo.patient_visit,那么它就会执行。

所以我需要进行其他Hibernate配置吗?

这是我的Hibernate映射。下面的映射在MySQL下有效。我可以读取和更新数据库中的patient_visit。但是当切换到MS Server时,它失败了。

我尝试了其他的Hibernate映射,它们在MySQL和MS Server上都有效,并且它们都使用了与下面相同的声明,比如table="db_table" schema="my_database"。

唯一的区别是我在MS Server下创建了这个新的emanagement数据库,所以我认为我在MS Server管理工具上错过了一些特定的数据库配置。

证明这一点的唯一方法是将新的表从emanagement移动到现有的数据库中,看看是否有效。


        
            
            
         
        
            
        
        
            
         
        
            
          
        
            
          
        
            
          
        
            
            
             
    

提前感谢您的帮助。

0
0 Comments

问题:使用Hibernate和SQL Server 2008时出现的问题

出现原因:在SQL Server中,模式是数据库中的一个容器,而不是数据库本身。根据你关于如果在查询中添加"dbo."后能正常工作的评论,这可能与MySQL不同。因此,需要将模式更改为dbo。

解决方法:将模式更改为dbo。在Hibernate配置文件中,指定模式为dbo。

示例代码:

dbo

0
0 Comments

问题:使用Hibernate和SQL Server 2008时出现问题。

原因:在映射文件中,配置不正确导致。解决方法是将以下配置添加到映射文件中:<class name="Users" table="databaseName.dbo.Users">,这样可以解决无效对象异常。需要注意的是,因为MSSQL服务器有默认的模式(dbo),所以必须使用完全限定的表名。

解决方法:将上述配置添加到映射文件中即可解决问题。在发布之前,请确保查看预览。如果您需要添加代码,请在代码前面添加4个空格。欢迎使用Stack,希望您喜欢它。

0
0 Comments

问题:使用Hibernate和SQL Server 2008时出现的问题

原因:当前设置下,可能需要指定模式(schema)。在映射中,可以通过以下方式指定模式:

<class name="Users" table="Users" schema="dbo" catalog="suiteaccess">

也可以使用hibernate.default_schema属性指定默认模式。

解决方法:创建自己的模式。在Pascal的回答基础上,看起来您可能在配置中指定了模式名应该在其中的数据库名。大多数我见过的ORM不使用三部分命名方案进行访问,所以我想这是一个配置错误。

另外,您可以在全局级别设置这些属性(即使用hibernate.default_schema属性),并根据需要在不同环境之间进行更改。

备注:此设置是与环境相关的。因此,将它们放在全局级别上,并根据需要在不同环境之间进行更改。

0