我已将在 Wildfly 9 上运行的 Web 应用程序从使用 SQL 身份验证迁移到使用 Windows 身份验证。我还需要更新一个直接在数据库上执行一些维护任务的 java 实用程序。Web 应用程序运行良好,但该实用程序似乎忽略了休眠配置中的默认模式设置。SQL Server 上的跟踪显示来自 wildflymyschema.<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>
战争休眠.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>
野蝇数据源
<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
- Hibernate 3.5.6-Final
- 微软 SQL JDBC 4.1
- SQL Server 2014
- JRE 7u67