Проблема с использованием Hibernate и SQL Server 2008 - PullRequest
4 голосов
/ 01 июля 2010

У меня проблемы с использованием Hibernate и SQL Server 2008. Когда я пытаюсь сохранить объект в базе данных, Hibernate выдает следующее:

could not retrieve snapshot: com.my.MyClass

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name `'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 в SQL Server, он говорит, что недопустимое имя объекта emanagement.patient_visit, но если я вручную добавлю это "dbo" emanagement.dbo.patient_visit, это будет преследоваться.

Так есть ли какие-либо другие конфигурации Hibernate, которые мне нужно сделать?

Это мое отображение Hibernate. Приведенное ниже отображение работает под MySQL. Я могу читать и обновлять Patient_visit в базе данных. Но при переключении на MS Server происходит сбой. Я пробовал другие отображения гибернации, которые работают как для MySQL, так и для MS Server, и они оба используют те же объявления, что и ниже, например table = "db_table" schema = "my_database". Единственное отличие состоит в том, что я создал эту новую базу данных emanagement под MS Server, поэтому я думаю, что пропустил какую-то конкретную конфигурацию базы данных в средстве управления MS Server. Единственный способ доказать это для меня - переместить новые таблицы из emanagement в существующую базу данных и посмотреть, работает ли она.

<class name="com.domain.patient.model.PatientVisit" table="patient_visit"    schema="emanagement">
        <id name="accountNumber" type="java.lang.Long">
            <column name="account_number" precision="22" scale="0" />
            <generator class="assigned"/>
        </id> 
        <property name="status" type="string">
            <column name="status"/>
        </property>
        <property name="cptCode" type="string">
            <column name="cpt_code"/>
        </property> 
        <property name="locked" type="boolean">
            <column name="locked" precision="1" scale="0"/>
        </property>  
        <property name="state" type="string">
            <column name="state"/>
        </property>  
        <property name="userId" type="string">
            <column name="userid"/>
        </property>  
               <set name="documents" lazy="false">
            <key column="account_number"/>
            <one-to-many class="com.domain.document.model.Document"/>
        </set>     
    </class>

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 01 июля 2010

Так есть ли какая-либо другая конфигурация Hibernate, которую мне нужно сделать?

С вашей текущей настройкой, я думаю, вам придется указать схему. Например, в отображении:

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

Но вы также можете указать схему по умолчанию, используя свойство hibernate.default_schema (см. 3.4. Необязательные свойства конфигурации ).

На всякий случай вы можете создать собственную схему .

0 голосов
/ 16 мая 2013

Поместите приведенную ниже конфигурацию в файл сопоставления.Это разрешило исключение Недопустимый объект.

<class name="Users" table="databaseName.dbo.Users">

Измените приведенную выше строку в файл сопоставления.Это должно быть работа.Потому что у сервера Mssql есть схема по умолчанию (dbo).Вот почему используйте полностью классифицированное имя таблицы.

0 голосов
/ 01 июля 2010

Измените схему на dbo. В SQL Server схема - это контейнер в базе данных, а не сама база данных. Это может отличаться в MySQL, но в этом случае ваша схема должна быть dbo (основываясь на ваших комментариях о том, что она работает, если вы добавите «dbo.» В ваш результирующий запрос.

Спасибо, Eric

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...