【发布时间】:2016-03-02 02:26:44
【问题描述】:
我已将在 Wildfly 9 上运行的 Web 应用程序从使用 SQL 身份验证迁移到使用 Windows 身份验证。我还需要更新一个直接在数据库上执行一些维护任务的 java 实用程序。 Web 应用程序运行良好,但该实用程序似乎忽略了休眠配置中的默认模式设置。 SQL Server 上的跟踪显示来自 wildfly 的查询有 myschema.<table name>,但来自我的实用程序的查询只有 <table name>。
在 SQL Server 上有一个登录 (DOMAIN\myservice) 用于运行 wildfly 服务的域帐户,我以同一帐户运行 util。
登录名映射到数据库上同名的用户 (DOMAIN\myservice)。
用户的默认架构为 dbo。
util-hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.connection.url">jdbc:sqlserver://sqlhost\INSTANCE:1433;databaseName=MYAPP;integratedSecurity=true</property>
<property name="hibernate.connection.pool_size">5</property>
<property name="hibernate.default_schema">myschema</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="....hbm.xml"/>
<mapping resource="...hbm.xml"/>
...
</session-factory>
</hibernate-configuration>
war-hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.datasource">jdbc/MYAPP</property>
<property name="hibernate.default_schema">myschema</property>
<mapping resource="....hbm.xml"/>
<mapping resource="...hbm.xml"/>
...
</session-factory>
</hibernate-configuration>
wildfly 数据源
<datasource jndi-name="java:jdbc/MYAPP" pool-name="MyDataSource" enabled="true">
<connection-url>jdbc:sqlserver://sqlhost\INSTANCE;databaseName=MYAPP;integratedSecurity=true</connection-url>
<driver>sqljdbc4.jar</driver>
<pool>
<max-pool-size>10</max-pool-size>
</pool>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker" />
<validate-on-match>false</validate-on-match>
<background-validation>true</background-validation>
<background-validation-millis>30000</background-validation-millis>
</validation>
</datasource>
在我的实用程序的日志记录中,我看到:
SettingFactory:222 - Default schema: myschema
但再往下看,我看到了错误:
com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name '<table name>'
表在 myschema 中的位置。
我尝试使用以下命令更新休眠映射文件:
<hibernate-mapping schema="myschema">
<class name="MyType" table="table_name">
还有
<hibernate-mapping>
<class name="MyType" schema="myschema" table="table_name">
但这也没有用。
事物的不同版本
- Wildfly 9.0.2.Final
- 休眠 3.5.6-Final
- Microsoft SQL JDBC 4.1
- SQL Server 2014
- JRE 7u67
【问题讨论】:
标签: sql-server hibernate sql-server-2014 mssql-jdbc sqljdbc