Skip to content
Advertisement

Hibernate Table or view does not exist Oracle

I Have a problem executing an hibernate query on Oracle:

my persistence.xml:

<description>ProfileEntityManager</description>
<class>com.entity.User</class>  
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
    <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
    <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@XXX:9999/db"/> 
    <property name="javax.persistence.jdbc.user" value="user"/> 
<property name="javax.persistence.jdbc.password" value="password"/> 
    <property name = "hibernate.show_sql" value = "true" />
</properties>

my entity class com.entity.User:

package com.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name ="USER", schema = "SCHEMA")
public class User{

    @Id
    @Column(name = "USER_ID")
    private String userId;
    @Column(name = "FIRST_NAME")
    private String firstName;
    @Column(name = "LAST_NAME")
    private String lastName;
    
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    
}

my java class:

        //System.out.println(uid);
        List<User> lp = null;
        try {
            lp = em.createNativeQuery("SELECT iu FROM User iu WHERE iu.userId = ?", User.class)
                    .setParameter(1, uid).getResultList();
        } catch (Exception e) {
            System.out.println(e.getMessage());
            writeLog(fw, e.getMessage());
        }

but when i execute my code, i obtain:

Hibernate: SELECT iu FROM User iu WHERE iu.userId = ?
gen 29, 2021 6:36:59 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 942, SQLState: 42000
gen 29, 2021 6:36:59 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ORA-00942: tabella o vista inesistente

org.hibernate.exception.SQLGrammarException: could not extract ResultSet

Can you help me to find the error?

NOTE: if a use a PreparedStatement with the same connections and query i don’t have any issue, so it is not a problem of permissions

Advertisement

Answer

You try to use HQL query with EntityManager.createNativeQuery method. This is a mistake.

Try to correct your query in this way:

em.createNativeQuery("SELECT * FROM SCHEMA.USER WHERE USER_ID = :usrid", User.class)
.setParameter("usrid", uid)
.getResultList();

If you use the SCHEMA for all your entities, you can put it to the hibernate config:

<property name="hibernate.default_schema" value="SCHEMA"/>

then correct your entity definition in the following way:

@Entity
@Table(name ="USER")
public class User {
   // ...
}

and then correct your query:

em.createNativeQuery("SELECT * FROM {h-schema}USER WHERE USER_ID = :usrid", User.class)
.setParameter("usrid", uid)
.getResultList();

P.S. And by the way, I would suggest you to correct your hibernate dialect definition. You should use as specific dialect as possible. For example if you use Oracle 10g, you should use org.hibernate.dialect.Oracle10gDialect. You can still use org.hibernate.dialect.Oracle9iDialect but some new features defined in Oracle10gDialect will not be available.

User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement