2016-03-02 10 views
2

Я перенесла веб-приложение, работающее на Wildfly 9, с использованием аутентификации SQL для проверки подлинности Windows. Мне также нужно обновить утилиту java, которая выполняет некоторые задачи обслуживания непосредственно в базе данных. Веб-приложение отлично работает, но, похоже, утилита игнорирует настройку схемы по умолчанию в конфигурации спящего режима. Трассировка на SQL Server показывает, что запросы, поступающие от wildfly, имеют myschema.<table name>, но запросы от моей утилиты имеют только <table name>.Почему схема по умолчанию игнорируется при использовании встроенной безопасности SQL Server?

На SQL Server существует логин (DOMAIN \ myservice) для учетной записи домена, в которой работает служба wildfly, и я запускаю утилиту в качестве той же учетной записи.

Вход в систему сопоставляется с пользователем в базе данных с тем же именем (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> 

войны 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

<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
  • Microsoft SQL JDBC 4.1
  • SQL Server 2014
  • JRE 7u67

ответ

1

Получается t он использовал SQLQuery, который я не заметил, и кажется, что hibernate не добавляет автоматически имя схемы по умолчанию к этому автоматически.

 Смежные вопросы

  • Нет связанных вопросов^_^