Pourquoi le schéma par défaut est-il ignoré lors de l'utilisation de la security embeddede de SQL Server?

J'ai migré une application Web exécutée sur Wildfly 9 à partir de l'authentification SQL à l'aide de l'authentification Windows. J'ai également besoin de mettre à jour un utilitaire Java qui effectue certaines tâches de maintenance directement sur la database. L'application Web fonctionne correctement, mais l'utilitaire semble ignorer le paramètre de schéma par défaut dans la configuration d'hibernation. Le suivi sur SQL Server montre que les requêtes provenant de wildfly ont myschema.<table name> mais les requêtes de mon utilitaire n'ont que <table name> .

Il existe un login (DOMAIN \ myservice) sur le server SQL pour le count de domaine sous lequel s'exécute le service Wildfly, et je l'utilise comme le même count.

La connection est mappée à un user de la database avec le même nom (DOMAIN \ myservice).

L'user a un schéma par défaut de 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> 

source de données 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> 

Dans la journalisation de mon utilitaire, je vois:

 SettingFactory:222 - Default schema: myschema 

Mais plus bas je vois l'erreur:

 com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name '<table name>' 

Où la table est dans myschema.

J'ai essayé de mettre à jour les files de mapping hibernate avec:

 <hibernate-mapping schema="myschema"> <class name="MyType" table="table_name"> 

Et

 <hibernate-mapping> <class name="MyType" schema="myschema" table="table_name"> 

Mais cela n'a pas fonctionné non plus.

Versions de choses

  • Wildfly 9.0.2.Final
  • Hibernate 3.5.6-Final
  • Microsoft SQL JDBC 4.1
  • SQL Server 2014
  • JRE 7u67

Il s'avère que l'utilitaire utilisait une requête SQL que je n'avais pas remarquée et il semble que hibernate n'ajoute pas automatiquement le nom de schéma par défaut.