DB2, Hibernate, JPA: схема не существует

Я довольно новичок в этом вопросе, и я хотел бы знать, что не так с тем, что я сделал до сих пор.

Итак, чтобы установить соединение с базой данных, я создал файл persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
             xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="
        http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="Primary">
        <class>xxx.model.Lecture</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.ibm.db2.jcc.DB2Driver" />
            <property name="javax.persistence.jdbc.url"    value="jdbc:db2://localhost:50000/xxx" />
            <property name="javax.persistence.jdbc.user" value="xxx" />
            <property name="javax.persistence.jdbc.password" value="xxx" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect"/>
            <property name="show_sql" value="true"/>
            <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
        </properties>
    </persistence-unit>
</persistence>

... и включил драйвер.jar: db2jcc4.jar

При запуске приложения я получаю следующую ошибку:

java.sql.SQLSyntaxErrorException: Schema 'DB2ADMIN' does not exist.

Так я что-то упустил?

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

1 ответ

Краткий ответ: вам нужно указать имя схемы БД по умолчанию в файле persistence.xml.

…
<property name="hibernate.default_schema" value="xxx"/>
…

Объяснение: Скорее всего, вы используете пользователя DB2ADMIN для подключения к БД. Имя схемы базы данных в DB2 (если не указано явно) равно имени пользователя, то есть DB2ADMIN. Такой схемы нет в вашей БД, поэтому вы получили ошибку.

Вам необходимо указать правильное имя схемы базы данных в конфигурации JPA, то есть имя схемы, в которой расположены таблицы. Нет свойства JPA для архивирования, но вы все равно используете hibernate, так что вы можете использовать специфическое свойство hibernate для достижения этой цели.

Другие вопросы по тегам