1

I am having a hard time connecting to an oracle database using hibernate.

I am getting null pointer exception at the line

sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();

this is what eclipse console logs

Apr 11, 2018 11:05:05 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.2.6.Final}
Apr 11, 2018 11:05:05 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Apr 11, 2018 11:05:06 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
Apr 11, 2018 11:05:06 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
The sessionFactory was not created. Could not connect to the database
Apr 11, 2018 11:05:06 PM org.hibernate.service.internal.AbstractServiceRegistryImpl stopService
INFO: HHH000369: Error stopping service [class org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl] : java.lang.NullPointerException

the setup function creates the SessionFactory

public class DatabaseConnectionManager {
    protected static SessionFactory sessionFactory;
    protected static StandardServiceRegistry serviceRegistry;

        /**
         * Creates a sessionFactory instance and thus the connection to the database
         * 
         */
        public void setup() {
            final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                    .configure( "hibernate.cfg.xml") // configures settings from hibernate.cfg.xml
                    .build();
            try {
               sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();


            } catch (Exception ex) {
                System.out.println("The sessionFactory was not created. Could not connect to the database");
                StandardServiceRegistryBuilder.destroy(registry);
            }
            if (sessionFactory != null) 
                System.out.println("Successfully connected  to the database");
        }
    }

this is my POJO

@Entity
@Table(name = "denomination_inventory")
public class DenominationCount {

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(name = "C")
    private int c;
    @Column(name = "L")
    private int l;
    @Column(name = "XX")
    private int xx;
    @Column(name = "X")
    private int x;
    @Column(name = "V")
    private int v;
    @Column(name = "II")
    private int ii;
    @Column(name = "I")
    private int i;
    @Column(name = "DATE_TIME")
    private LocalDateTime dateTime;

    public DenominationCount() {
        super();
    }

    /**
     * Gets the entity's id
     * 
     * @return an int representing the entity's id
     */
    public int getId() {
        return id;
    }

    /**
     * Sets the entity's id
     * 
     * @param id
     *            an int containing the entity's id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * Gets the number of coins for the One Pound denomination
     * 
     * @return an int representing the number of coins for the One Pound
     *         denomination
     */
    public int getC() {
        return c;
    }

    /**
     * Sets the entity's number of coins for the One Pound denomination
     * 
     * @param c
     *            an int containing the number of coins for the One Pound
     *            denomination
     */
    public void setC(int c) {
        this.c = c;
    }

    /**
     * Gets the number of coins for the Fifty Pence denomination
     * 
     * @return an int representing the number of coins for the Fifty Pence
     *         denomination
     */
    public int getL() {
        return l;
    }

    /**
     * Sets the entity's number of coins for the Fifty Pence denomination
     * 
     * @param c
     *            an int containing the number of coins for the Fifty Pence
     *            denomination
     */
    public void setL(int l) {
        this.l = l;
    }

    /**
     * Gets the number of coins for the Twenty Pence denomination
     * 
     * @return an int representing the number of coins for the Twenty Pence
     *         denomination
     */
    public int getXX() {
        return xx;
    }

    /**
     * Sets the entity's number of coins for the Twenty Pence denomination
     * 
     * @param c
     *            an int containing the number of coins for the Twenty Pence
     *            denomination
     */
    public void setXX(int xx) {
        this.xx = xx;
    }

    /**
     * Gets the number of coins for the Ten Pence denomination
     * 
     * @return an int representing the number of coins for the Ten Pence
     *         denomination
     */
    public int getX() {
        return x;
    }

    /**
     * Sets the entity's number of coins for the Ten Pence denomination
     * 
     * @param c
     *            an int containing the number of coins for the Ten Pence
     *            denomination
     */
    public void setX(int x) {
        this.x = x;
    }

    /**
     * Gets the number of coins for the Five Pence denomination
     * 
     * @return an int representing the number of coins for the Five Pence
     *         denomination
     */
    public int getV() {
        return v;
    }

    /**
     * Sets the entity's number of coins for the Five Pence denomination
     * 
     * @param c
     *            an int containing the number of coins for the Five Pence
     *            denomination
     */
    public void setV(int v) {
        this.v = v;
    }

    /**
     * Gets the number of coins for the Two Pence denomination
     * 
     * @return an int representing the number of coins for the Two Pence
     *         denomination
     */
    public int getII() {
        return ii;
    }

    /**
     * Sets the entity's number of coins for the Two Pence denomination
     * 
     * @param c
     *            an int containing the number of coins for the Two Pence
     *            denomination
     */
    public void setII(int ii) {
        this.ii = ii;
    }

    /**
     * Gets the number of coins for the One Penny denomination
     * 
     * @return an int representing the number of coins for the One Penny
     *         denomination
     */
    public int getI() {
        return i;
    }

    /**
     * Sets the entity's number of coins for the One Penny denomination
     * 
     * @param c
     *            an int containing the number of coins for the One Penny
     *            denomination
     */
    public void setI(int i) {
        this.i = i;
    }

    /**
     * Gets the entity's time of insertion into the database
     * 
     * @return a datetime representing the time when the entity was inserted into
     *         the database
     */
    public LocalDateTime getDateTime() {
        return dateTime;
    }

    /**
     * Sets the entity's time of insertion into the database
     * 
     * @param dateTime
     *            a datetime containing the time when the entity was inserted into
     *            the database
     */
    public void setDateTime(LocalDateTime dateTime) {
        this.dateTime = dateTime;
    }

    @Override
    public String toString() {
        return "DenominationCount [Id=" + id + ", 100=" + c + ", 50=" + l + ", 20=" + xx + ", 10=" + x + ", 5=" + v
                + ", 2=" + ii + ", 1=" + i + ", Data=" + dateTime + "]";
    }

}

this is the main file ( the setup function is called in the controller's constructor)

public class AppEngine {
    public static void main(String[] args) throws InsufficientCoinageException {

        CoinCountController controller = new CoinCountController();
}
}

the configuration file

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>      
  <session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property> 
    <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
    <property name="hibernate.connection.username">cosmin</property>
    <property name="hibernate.connection.password">123456</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.connection.release_mode">auto</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.connection.autoReconnect">true</property>

    <mapping class="vmproj.model.entity.DenominationCount" />

  </session-factory>
</hibernate-configuration>

If I delete this row from my config file

name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>

(I've also tried connecting using the SID but without any success)

then the SessionFactory is created and the connection is established but still when I try to update a record for instance into the database

this is what my console shows

Apr 11, 2018 11:20:20 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.2.6.Final}
Apr 11, 2018 11:20:20 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Apr 11, 2018 11:20:20 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
Apr 11, 2018 11:20:21 PM org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator initiateService
WARN: HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections
Apr 11, 2018 11:20:21 PM org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator initiateService
WARN: HHH000342: Could not obtain connection to query metadata : The application must supply JDBC connections
Apr 11, 2018 11:20:21 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.OracleDialect
Apr 11, 2018 11:20:21 PM org.hibernate.dialect.Oracle9Dialect <init>
WARN: HHH000063: The Oracle9Dialect dialect has been deprecated; use either Oracle9iDialect or Oracle10gDialect instead
Apr 11, 2018 11:20:21 PM org.hibernate.dialect.OracleDialect <init>
WARN: HHH000064: The OracleDialect dialect has been deprecated; use Oracle8iDialect instead
Apr 11, 2018 11:20:21 PM org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl makeLobCreatorBuilder
INFO: HHH000422: Disabling contextual LOB creation as connection was null
Successfully connected  to the database
Exception in thread "main" java.lang.UnsupportedOperationException: The application must supply JDBC connections
    at org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.getConnection(UserSuppliedConnectionProviderImpl.java:44)
    at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:99)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:129)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:247)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:254)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:203)
    at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:56)
    at org.hibernate.internal.AbstractSharedSessionContract.beginTransaction(AbstractSharedSessionContract.java:401)

Edit:

I added a printstacktrace and this is the problem

  Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [oracle.jdbc.driver.OracleDriver]

although I have the ojdbc8 in Maven repository

4
  • Probable duplicate of stackoverflow.com/questions/30345626/… Commented Apr 11, 2018 at 21:01
  • no..that still doesn't solve it Commented Apr 11, 2018 at 21:24
  • you might want to double check your db credentials Commented Apr 12, 2018 at 7:58
  • checked them ...they are correct Commented Apr 12, 2018 at 19:03

1 Answer 1

0

I added an older version of the ojdbc driver and now it works. problem solved

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.