Меню

Ошибка схема jpa не существует

I’m quite new to the subject and I’d like to know what is wrong with what I’ve done so far.

So to establish the database connectioin I created a 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>

… and included the driver .jar: db2jcc4.jar

When running the app I get the following error:

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

So did I miss something essential?

Thanks in advance!

asked Jun 5, 2015 at 11:44

Micromonger's user avatar

1

Short Answer: you need to specify default DB schema name in persistence.xml.

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

Explanation:
Most probably you are using DB2ADMIN user to connect to the DB. The database schema name in DB2 (if not explicitly specified) is equal to user name, i.e. DB2ADMIN. Such schema doesn’t exist in your DB therefore you’ve got the error.

You need to specify proper database schema name in JPA config, i.e. schema name where the tables are located. There is no JPA property to archive this but you are using hibernate anyway, so you can use hibernate specific property to achieve this.

answered Jun 8, 2015 at 20:50

Alexander Pranko's user avatar

I’m quite new to the subject and I’d like to know what is wrong with what I’ve done so far.

So to establish the database connectioin I created a 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>

… and included the driver .jar: db2jcc4.jar

When running the app I get the following error:

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

So did I miss something essential?

Thanks in advance!

asked Jun 5, 2015 at 11:44

Micromonger's user avatar

1

Short Answer: you need to specify default DB schema name in persistence.xml.

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

Explanation:
Most probably you are using DB2ADMIN user to connect to the DB. The database schema name in DB2 (if not explicitly specified) is equal to user name, i.e. DB2ADMIN. Such schema doesn’t exist in your DB therefore you’ve got the error.

You need to specify proper database schema name in JPA config, i.e. schema name where the tables are located. There is no JPA property to archive this but you are using hibernate anyway, so you can use hibernate specific property to achieve this.

answered Jun 8, 2015 at 20:50

Alexander Pranko's user avatar

Я работаю над приложением spring boot 2 и пытаюсь установить соединение с базой данных postgresql с настройкой источника данных hikari и Spring Jpa.

Мне это удалось, и я использую hibernate.hbm2ddl.auto как update, поэтому он создает таблицу, если не существует, но проблема только в том, что он генерирует исключение, когда схема не существует

Ошибка

GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement
Caused by: org.postgresql.util.PSQLException: ERROR: schema "test_schema" does not exist

Настроил все вручную через класс конфигурации

Класс конфигурации

@Bean
@Primary
public HikariDataSource dataSource() {

    HikariConfig config = new HikariConfig();

    config.setJdbcUrl(databaseUrl);
    config.setUsername(username);
    config.setPassword(password);
    config.setDriverClassName(driverClassName);
    config.setConnectionTimeout(connectionTimeout);
    config.setIdleTimeout(idleTimeout);
    config.setMaximumPoolSize(maxpoolSize);
    config.setMaxLifetime(maxLifeTime);
    config.setMinimumIdle(minIdleConnections);
    //config.setPoolName(poolName);

    return new HikariDataSource(config);
}

@Bean
public Properties additionalProps() {
    Properties jpaProps = new Properties();

    jpaProps.put(hbDialect, "org.hibernate.dialect.PostgreSQLDialect");
    jpaProps.put(autoDDL, "update");
    jpaProps.put(showSql, true);
    jpaProps.put(formatSql, true);

    return jpaProps;
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
    factory.setDataSource(dataSource());
    factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
    factory.setPackagesToScan("com.target.storetaskcount.entity");
    factory.setJpaProperties(additionalProps());
    return factory;
}

@Bean
public JpaTransactionManager transactionManager(EntityManagerFactory factory) {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
    return transactionManager;
}

Как мне сделать это, чтобы создать схему, если она не существует?

Я видел здесь аналогичный вопрос и пробовал все, пока не повезло подобный-вопрос (я не хочу использовать flyway db)

Вот документация hibernate-doc , но неясно, как добавить это свойство для создания схемы javax.persistence.schema-generation.database.action

3 ответа

Лучший ответ

Добавление этого свойства сработало и создало схему, если она не существует, здесь

jpaProps.put("javax.persistence.create-database-schemas", true);

JPA-вариант hibernate.hbm2dll.create_namespaces. Определяет, должен ли поставщик постоянства создавать схемы базы данных в дополнение к созданию объектов базы данных (таблиц, последовательностей, ограничений и т. Д.). Значение этого логического свойства должно быть установлено в true, если поставщик сохраняемости должен создавать схемы в базе данных или генерировать DDL, содержащий команды «CREATE SCHEMA». Если это свойство не указано (или явно неверно), поставщик не должен пытаться создавать схемы базы данных.


4

Deadpool
24 Янв 2019 в 01:56

Хотя другой ответ полностью верен, я делюсь тем, что сработало для меня. Добавление этого в файл application.properties создаст схемы, если они отсутствуют.

spring.jpa.properties.hibernate.hbm2dll.create_namespaces=true

Здесь мы используем собственное свойство Hibernates с префиксом (spring.jpa.properties. *) С Spring JPA. Точно так же вы можете использовать многие другие собственные свойства Hibernates.

Весенние Документы

Вы можете установить его вместе с другими собственными свойствами Hibernate с помощью spring.jpa.properties. * (Префикс удаляется перед добавлением их в диспетчер сущностей).

* В моем случае я использовал MSSQL Server


3

user7082
12 Июл 2021 в 03:35

Это то, что сработало для меня для Postgres на Springboot 2.6.2.

Он создаст схему (adapterborder), если она не существует, и будет использовать ее как default_schema при создании всех таблиц сущностей.

Включил TRACE для ведения журнала, чтобы увидеть, как это работает.

spring:
  jpa:
    open-in-view: false
    generate-ddl: true
    properties:
      javax:
        persistence:
          schema-generation:
            database:
              action: create
      hibernate:
        show_sql: true
        use_sql_comments: true
        format_sql: true
        generate_statistics: false
        jdbc:
          fetch_size: 2000
          lob.non_contextual_creation: true
        dialect: org.hibernate.dialect.PostgreSQLDialect
        ddl-auto: create
        hbm2dll:
          create_namespaces: true
        default_schema: adapterborder

  datasource:
    url: jdbc:postgresql://localhost:5432/postgres?currentSchema=adapterborder
    username: postgres
    password: postgres
    driver-class-name: org.postgresql.Driver
    testWhileIdle: true
    hikari:
      minimumIdle: 5
      maximumPoolSize: 20
      idleTimeout: 30000
      poolName: SpringBootJPAHikariCP
      maxLifetime: 200000
      connectionTimeout: 30000
      connection-test-query: SELECT 1

logging:
  level:
    '[org.springframework.data]': TRACE
    '[org.hibernate]': TRACE
    '[javax.persistence]': TRACE


1

JCompetence
30 Мар 2022 в 14:14

База данных:

user_account
id(pk)
email
password
...

user_detail
id(pk fk)
name_first
name_last
...

Сущность

@Entity
@Table(name="user_account")     
@SecondaryTable(name="user_detail", pkJoinColumns=@PrimaryKeyJoinColumn())
public class UserAccount implements Serializable{
    private static final long serialVersionUID = -2606506548742732094L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    private String email;
    private String password;
    private String tab;
    private String shortcut;
    private String setting;
    private Integer role;

    @Column(table="user_detail", name="name_first")
    private String nameFirst;
    @Column(table="user_detail", name="name_last")
    private String nameLast;
    @Column(table="user_detail")
    private String occupation;
    @Column(table="user_detail")
    @Temporal(TemporalType.DATE)
    private Date birth;
    ....
}

Действие

    try{
        EntityTransaction transaction = em.getTransaction();
        transaction.begin();
        em.persist(currentUser);

        transaction.commit();
    } catch (Exception e){
    }

Ошибка

ИНФОРМАЦИЯ: [Предупреждение EL]: 2012-01-06 18: 45: 46.77 — ClientSession (17472935) — Исключение [EclipseLink-4002] (Eclipse Persistence Services — 2.3.0.v20110604-r9504): org.eclipse.persistence .exceptions.DatabaseException Внутреннее исключение: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Таблица ‘mazedb.sequence’ не существует Код ошибки: 1146 Вызов: ОБНОВИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ НАБОР SEQ_COUNT = SEQ_COUNT +? ГДЕ SEQ_NAME =? bind => [привязано 2 параметра] Запрос: DataModifyQuery (name = «SEQUENCE» sql = «UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT +? WHERE SEQ_NAME =?»)

ИНФОРМАЦИЯ: ОШИБКА: внутреннее исключение: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: таблица ‘mazedb.sequence’ не существует Код ошибки: 1146 Вызов: ОБНОВИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ НАБОР SEQ_COUNT = SEQ_COUNT +? ГДЕ SEQ_NAME =? bind => [привязано 2 параметра] Запрос: DataModifyQuery (name = «SEQUENCE» sql = «UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT +? WHERE SEQ_NAME =?»)

Я попробовал сделать наоборот, объединив два разных объекта с помощью @PrimaryKeyJoinColumn, но я получил ту же ошибку.

5 ответы

Создан 06 янв.

У меня никогда раньше не было этой ошибки, несмотря на то, что я делал такие вещи сто раз. Я обнаружил, что эта ошибка связана с тем, что у меня было свойство гибернации для создания таблиц в persistence.xml но использовал EclipseLink:

Это было:

    <property name="hibernate.hbm2ddl.auto" value="create"/>

Я изменил на следующее, чтобы исправить ошибку:

    <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
    <!-- or just value="create-tables" -->

Создан 18 сен.

@GeneratedValue(strategy=GenerationType.AUTO) выглядит как значение по умолчанию, предоставляемое IDE при создании объекта. Однако, если вы используете org.eclipse.persistence.jpa.PersistenceProvider, учитывая способ обработки этой аннотации (что приводит к возникновению исключения), самым простым решением было бы просто использовать @GeneratedValue(strategy=GenerationType.IDENTITY) .

Создан 06 июля ’19, 16:07

Это исключение может возникнуть, даже если вы используете @GeneratedValue(strategy=GenerationType.IDENTITY)!

Из EclipseLink вики:

ВниманиеСтратегия: IDENTITY зависит от базы данных и поддерживается не во всех базах данных. IDENTITY поддерживается в базах данных Sybase, DB2, SQL Server, MySQL, Derby, JavaDB, Informix, SQL Anywhere, H2, HSQL, Access и Postgres.

Я изменил сервер и клиент базы данных с MySQL на MariaDB, который не поддерживается для GenerationType.IDENTITY как указано выше. Поэтому мне пришлось добавить следующее свойство в persistence.xml:

<persistence ...
  <persistence-unit ...
  ...
  <properties>
    <property name="eclipselink.target-database" value="MySQL"/>
  </properties>
  ...

Создан 16 фев.

В файле конфигурации org.hibernate.dialect.oracle10gdialect строку можно забыть. Действительно, org.hibernate.dialect.mysqldialect должно быть.

Создан 03 ноя.

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

java
jpa
eclipselink

or задайте свой вопрос.

У меня была такая же проблема с PostgreSQL и JPA (ОШИБКА o.h.e.jdbc.spi.SqlExceptionHelper — ОШИБКА: отношение «schema.table» не существует), и я понял это решение.

В ваших классах сущностей добавьте escape-символы «между именем элемента базы данных. Например:

Используйте эту форму:

@Table(name = ""USUARIO"", schema = ""INVENTARIODB"")

Вместо типичного способа

@Table(name = "USUARIO", schema = "INVENTARIODB")

То же самое касается имен столбцов.

@Column(name = ""ID"", nullable = false, updatable = false)    
private Long id;

Скорее, чем

@Column(name = "ID", nullable = false, updatable = false)    
private Long id;

Обновлено:

Я обнаружил причину проблемы. Я использовал Valentina Studio для создания своей БД, если я использую заглавные буквы (MYTABLE) вместо строчных букв (mytable) для создания своих таблиц, мне приходилось использовать двойные кавычки внутри операторов SQL. Это потому, что PostgreSQL чувствителен к регистру. Если вы не можете изменить свою базу данных, воспользуйтесь моим последним решением. Также неплохо включить свойство spring.jpa.show-sql = true, чтобы вы могли видеть запросы спящего режима и знать, что происходит.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Hibernate: alter table car drop constraint FK_px3300yj8c0vpwhekpuo9352d
2016-09-27 06:45:55.528 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table car drop constraint FK_px3300yj8c0vpwhekpuo9352d
2016-09-27 06:45:55.528 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: отношение "car" не существует
Hibernate: alter table role_mapping drop constraint FK_edaglitldx8ty9xvmd8rapgar
2016-09-27 06:45:55.529 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table role_mapping drop constraint FK_edaglitldx8ty9xvmd8rapgar
2016-09-27 06:45:55.529 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: отношение "role_mapping" не существует
Hibernate: alter table role_mapping drop constraint FK_t7ggxcr2fckdcx4u2sw57ov43
2016-09-27 06:45:55.530 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table role_mapping drop constraint FK_t7ggxcr2fckdcx4u2sw57ov43
2016-09-27 06:45:55.530 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: отношение "role_mapping" не существует
Hibernate: drop table if exists car cascade
Hibernate: drop table if exists car_description cascade
Hibernate: drop table if exists role_mapping cascade
Hibernate: drop table if exists user_role cascade
Hibernate: drop table if exists users cascade
Hibernate: drop table if exists whisky cascade
Hibernate: drop table if exists yachts cascade
Hibernate: create table car (idcar  bigserial not null, name_car varchar(255), photo varchar(255), car_description_id int8, primary key (idcar))
2016-09-27 06:45:55.533 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: create table car (idcar  bigserial not null, name_car varchar(255), photo varchar(255), car_description_id int8, primary key (idcar))
2016-09-27 06:45:55.533 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: схема для создания объектов не выбрана
  Позиция: 14
Hibernate: create table car_description (id  bigserial not null, descriptioon varchar(255), price numeric(19, 2), quantity int4, primary key (id))
2016-09-27 06:45:55.534 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: create table car_description (id  bigserial not null, descriptioon varchar(255), price numeric(19, 2), quantity int4, primary key (id))
2016-09-27 06:45:55.534 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: схема для создания объектов не выбрана
  Позиция: 14
Hibernate: create table role_mapping (user_id varchar(255) not null, role_uid int8 not null)
2016-09-27 06:45:55.534 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: create table role_mapping (user_id varchar(255) not null, role_uid int8 not null)
2016-09-27 06:45:55.535 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: схема для создания объектов не выбрана
  Позиция: 14
Hibernate: create table user_role (id int8 not null, name varchar(255), primary key (id))
2016-09-27 06:45:55.535 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: create table user_role (id int8 not null, name varchar(255), primary key (id))
2016-09-27 06:45:55.535 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: схема для создания объектов не выбрана
  Позиция: 14
Hibernate: create table users (name varchar(255) not null, active int4, email varchar(255), login_date timestamp, password varchar(255), verification varchar(255), primary key (name))
2016-09-27 06:45:55.536 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: create table users (name varchar(255) not null, active int4, email varchar(255), login_date timestamp, password varchar(255), verification varchar(255), primary key (name))
2016-09-27 06:45:55.536 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: схема для создания объектов не выбрана
  Позиция: 14
Hibernate: create table whisky (id  bigserial not null, description varchar(255), name varchar(255), photo varchar(255), price numeric(19, 2), quantity int4, primary key (id))
2016-09-27 06:45:55.536 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: create table whisky (id  bigserial not null, description varchar(255), name varchar(255), photo varchar(255), price numeric(19, 2), quantity int4, primary key (id))
2016-09-27 06:45:55.536 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: схема для создания объектов не выбрана
  Позиция: 14
Hibernate: create table yachts (idyacht  bigserial not null, descriptions varchar(255), name varchar(255), quantity int4, photo varchar(255), price numeric(19, 2), primary key (idyacht))
2016-09-27 06:45:55.537 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: create table yachts (idyacht  bigserial not null, descriptions varchar(255), name varchar(255), quantity int4, photo varchar(255), price numeric(19, 2), primary key (idyacht))
2016-09-27 06:45:55.537 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: схема для создания объектов не выбрана
  Позиция: 14
Hibernate: alter table car add constraint FK_px3300yj8c0vpwhekpuo9352d foreign key (car_description_id) references car_description
2016-09-27 06:45:55.537 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table car add constraint FK_px3300yj8c0vpwhekpuo9352d foreign key (car_description_id) references car_description
2016-09-27 06:45:55.537 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: отношение "car" не существует
Hibernate: alter table role_mapping add constraint FK_edaglitldx8ty9xvmd8rapgar foreign key (role_uid) references user_role
2016-09-27 06:45:55.538 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table role_mapping add constraint FK_edaglitldx8ty9xvmd8rapgar foreign key (role_uid) references user_role
2016-09-27 06:45:55.538 ERROR 5260 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : ОШИБКА: отношение "role_mapping" не существует

I am trying to run hibernate on a PostgreSQL 8.4.2 DB. Whenever I try to run a simple java code like:

List<User> users = service.findAllUsers();

I get the following error:

PSQLException: ERROR: relation "TABLE_NAME" does not exist

Since I have option hibernate.show_sql option set to true, I can see that hibernate is trying to run the following SQL command:

    select this_.USERNAME as USERNAME0_0_, this_.PASSWORD as PASSWORD0_0_ 
from "TABLE_NAME" this_

When in reality, it should at least run something like:

    select this_."USERNAME" as USERNAME0_0_, this_."PASSWORD" as PASSWORD0_0_ 
from "SCHEMA_NAME"."TABLE_NAME" as this_

Does anyone know what changes I need to make for Hibernate to produce the right SQL for PostgreSQL?

I have set up the necessary postgreSQL datasource in applicationContext.xml file:

<!-- Use Spring annotations -->
 <context:annotation-config /> 
 <!-- postgreSQL datasource -->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName" value="org.postgresql.Driver" />
  <property name="url"
   value="jdbc:postgresql://localhost/DB_NAME:5432/SCHEMA_NAME" />
  <property name="username" value="postgres" />
  <property name="password" value="password" />
  <property name="defaultAutoCommit" value="false" />
 </bean>

On the same file I have set up the session factory with PostgreSQL dialect:

<!-- Hibernate session factory -->
 <bean id="sessionFactory"   class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="annotatedClasses">
   <list>
    <value>com.myPackage.dbEntities.domain.User</value>
   </list>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
 </bean>
 <!-- setup transaction manager -->
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
 </bean>

Finally, the way I am mapping the domain class to the table is:

    @Entity
@Table(name = "`TABLE_NAME`")
public class User {
@Id
@Column(name = "USERNAME")
private String username;

Has anyone encountered a similar error?. Any help in solving this issue will be much appreciated.
Please note that question is different to post Cannot simply use PostgreSQL table name (”relation does not exist”)

Apologies for the lengthy post.

I am trying to run hibernate on a PostgreSQL 8.4.2 DB. Whenever I try to run a simple java code like:

List<User> users = service.findAllUsers();

I get the following error:

PSQLException: ERROR: relation "TABLE_NAME" does not exist

Since I have option hibernate.show_sql option set to true, I can see that hibernate is trying to run the following SQL command:

    select this_.USERNAME as USERNAME0_0_, this_.PASSWORD as PASSWORD0_0_ 
from "TABLE_NAME" this_

When in reality, it should at least run something like:

    select this_."USERNAME" as USERNAME0_0_, this_."PASSWORD" as PASSWORD0_0_ 
from "SCHEMA_NAME"."TABLE_NAME" as this_

Does anyone know what changes I need to make for Hibernate to produce the right SQL for PostgreSQL?

I have set up the necessary postgreSQL datasource in applicationContext.xml file:

<!-- Use Spring annotations -->
 <context:annotation-config /> 
 <!-- postgreSQL datasource -->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName" value="org.postgresql.Driver" />
  <property name="url"
   value="jdbc:postgresql://localhost/DB_NAME:5432/SCHEMA_NAME" />
  <property name="username" value="postgres" />
  <property name="password" value="password" />
  <property name="defaultAutoCommit" value="false" />
 </bean>

On the same file I have set up the session factory with PostgreSQL dialect:

<!-- Hibernate session factory -->
 <bean id="sessionFactory"   class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="annotatedClasses">
   <list>
    <value>com.myPackage.dbEntities.domain.User</value>
   </list>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
 </bean>
 <!-- setup transaction manager -->
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
 </bean>

Finally, the way I am mapping the domain class to the table is:

    @Entity
@Table(name = "`TABLE_NAME`")
public class User {
@Id
@Column(name = "USERNAME")
private String username;

Has anyone encountered a similar error?. Any help in solving this issue will be much appreciated.
Please note that question is different to post Cannot simply use PostgreSQL table name (”relation does not exist”)

Apologies for the lengthy post.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка сф мото 0118
  • Ошибка сухого хода на водяном насосе