Solve the Error “org hibernate exception sqlgrammarexception could not extract resultset”

Java is known for developing mobile applications, web applications, desktop applications, game applications, and other applications in a simpler way. It is a server-side and object-oriented language for developing back-end projects. When it comes to Java programming, hibernate is an open-source ORM tool (object-relational mapping tool), which provides programmers a framework to map domain models (object-oriented) to relational databases ideal for web applications. When you are working with hibernate, you may encounter the error “org hibernate exception sqlgrammarexception could not extract resultset”.

Don’t worry when you get this error warning as we are here to help you solve the issue. We provide you with the information and solution to make the error go away. Let’s figure out how the error shows up

How the error occurs

When you try to add jdbc drivers and jars to your project, you end up with the following error

INFO: HHH000327: Error performing load command : org.hibernate.exception.SQLGrammarException: could not extract ResultSet
 Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not extract ResultSet
  at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:80)
  at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
  at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
  at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
  at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:91)
  at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.getResultSet(AbstractLoadPlanBasedLoader.java:449)
  at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeQueryStatement(AbstractLoadPlanBasedLoader.java:202)
  at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:137)
  at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102)
  at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:186)
  at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4126)
  at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:503)
  at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:468)
  at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:213)
  at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:275)
  at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:151)
  at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1106)
  at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:176)
  at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2587)
  at org.hibernate.internal.SessionImpl.get(SessionImpl.java:991)
  at com.util.Executingclass.main(Executingclass.java:10)
 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'product0_.product' in 'field list'
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
  at java.lang.reflect.Constructor.newInstance(Unknown Source)
  at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
  at com.mysql.jdbc.Util.getInstance(Util.java:387)
  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:941)
  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3870)
  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3806)
  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2470)
  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2617)
  at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2550)
  at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
  at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1962)
  at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82)
  ... 16 more

It happens when you use the following script

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>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">1234</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <mapping class="com.util.Product"/>
    </session-factory>
</hibernate-configuration
entity class
@Entity
@Table(name="productdetails")
public class Product implements Serializable {

    @Id
    @Column(name="product-id")
    private int id;
    @Column(name="product-name")
    private String name;
    @Column(name="product-description")
    private String description;
    @Column(name="product-price")
    private float price;
    public Product() {
        super();
    }

    public Product(int id, String name, String description, float price) {
        super();
        this.id = id;
        this.name = name;
        this.description = description;
        this.price = price;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public float getPrice() {
        return price;
    }
    public void setPrice(float price) {
        this.price = price;
    }

}

public class Executingclass {
    public static void  main(String args[]) {
        SessionFactory  sessionFactory=Hibernateutil.getSessionFactory();
        Session session=sessionFactory.openSession();
        Product product=(Product)session.get(Product.class, 1);
        System.out.println(product.getId());
        System.out.println(product.getName());
        System.out.println(product.getDescription());
        System.out.println(product.getPrice());


    }

}

public class Hibernateutil {
    static SessionFactory sessionFactory=null;
    static{
        Configuration configuration=new Configuration();
        configuration.configure();

        ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
        sessionFactory=configuration.buildSessionFactory(serviceRegistry);
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

It is how the error you get the error. Have a look at the solution to fix it

The Solution to Fix the Error “org hibernate exception sqlgrammarexception could not extract resultset”

To help you solve the error efficiently, we bring an amazing solution that can instantly work.

Solution

A line that points in the direction of the error in the stacktrace is the following

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'product0_.product' in 'field list'

The cause of the problem is the error in the mapping of the fields in the class. Check it out

@Id
@Column(name="product-id")
private int id;
@Column(name="product-name")
private String name;
@Column(name="product-description")
private String description;
@Column(name="product-price")
private float price;

If you see the output carefully in the stacktrace, you will know that no column name with product0_.product instead there is just product, which is followed by a hyphen. So, it is the hyphen that is causing the error. Though hyphens can be used in special cases. When you are using hibernate, you need to know that hibernate is not handling hyphens in the right way.

You need to try using it with no hyphens in the schema in the @Entity as well as the database. It resolves the error warning.

Conclusion

In this post, we discussed the solution to help you fix the error “org hibernate exception sqlgrammarexception could not extract resultset”. I hope you enjoyed the post and also find it helpful!

I wish you luck!

Don’t forget to drop a message in the below comment box if you need assistance.

Leave a Reply

Your email address will not be published. Required fields are marked *