Granny's Programming Pearls
"inside of every large program is a small program struggling to get out"
JavaRanch.com/granny.jsp
The moose likes Object Relational Mapping and the fly likes org.hibernate.exception.SQLGrammarException: could not insert: [com.Course] Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Databases » Object Relational Mapping
Bookmark "org.hibernate.exception.SQLGrammarException: could not insert: [com.Course]" Watch "org.hibernate.exception.SQLGrammarException: could not insert: [com.Course]" New topic
Author

org.hibernate.exception.SQLGrammarException: could not insert: [com.Course]

Vick Chak
Greenhorn

Joined: May 18, 2011
Posts: 6
Hi,

Stuck with this error for the past three days.

org.hibernate.exception.SQLGrammarException: could not insert: [com.Course]
at org.hibernate.exception.CacheSQLStateConverter.convert(CacheSQLStateConverter.java:89)
............
at com.Main.saveCourse(Main.java:43)
at com.Main.main(Main.java:19)
Caused by: java.sql.SQLException: [SQLCODE: <-30>:<Table or View not found>]
[Cache Error: <<SYNTAX>errdone+2^%qaqqt>]
[Details: <Prepare>]
[%msg: < SQL ERROR #30: Table 'SQLUSER.COURSE' not found>]
at com.intersys.jdbc.CacheConnection.getServerError(CacheConnection.java:1057)

Code provided below. Using intersystems cache

hibernate.cfg.xml

<hibernate-configuration>
<session-factory name="SessionFactory">
<property name="hibernate.connection.driver_class">com.intersys.jdbc.CacheDriver</property>
<property name="hibernate.connection.password">SYS</property>
<property name="hibernate.connection.url">jdbc:Cache://127.0.0.1:1972/USER</property>
<property name="hibernate.connection.username">_SYSTEM</property>
<property name="hibernate.dialect">org.hibernate.dialect.Cache71Dialect</property>
<mapping resource="com/Course.hbm.xml"/>
</session-factory>
</hibernate-configuration>

Course.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Jun 4, 2011 11:09:14 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.Course" table="SQLUSER.COURSE">(Have tried with COURSE as well)
<id name="courseId" type="long">
<column name="COURSEID" />
<generator class="assigned" />
</id>
<property name="courseName" type="java.lang.String">
<column name="COURSENAME" />
</property>
</class>
</hibernate-mapping>

Main.java

public static void main(String[] args) {
// TODO Auto-generated method stub
Main obj=new Main();
System.out.println("main");
obj.saveCourse("Physics");
obj.saveCourse("Chemistry");
obj.saveCourse("Maths");
}
public void saveCourse(String subject)
{
Session sess=HibernateUtil.getSessionFactory().openSession();
Transaction trans= null;
Long courseId=null;
try
{
trans=sess.beginTransaction();
trans.begin();
Course course=new Course();
course.setCourseName(subject);
courseId= (Long)sess.save(course);
trans.commit();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
sess.close();
}
}

Would be very helpful if someone could point out the issue in the above code.

Thanks.
Vickram
Hemant Thard
Ranch Hand

Joined: Dec 23, 2008
Posts: 122
Hi Vick Chak,

problem might be because you are using generator class as "assigned", but not setting the primary key in your.

here is the reference link.


Hope this Help,
Hemant
Vick Chak
Greenhorn

Joined: May 18, 2011
Posts: 6
Thanks, I'll try that. But when I created the table course explicitly using a query in the database, it inserted fine.Seems like I need to write explicit code for creating the table and then call session.save method?
Hemant Thard
Ranch Hand

Joined: Dec 23, 2008
Posts: 122
hi Vick,

That may be because you have used auto-increment setting in your DB.
but when you use generator class = "assigned", hibernate expects you to set id on your bean class while saving.

try setting generator class to native and post result.


Regards,
Hemant
Waswani Naresh
Ranch Hand

Joined: May 01, 2008
Posts: 66
Hi Vick,

Could you please paste the stack trace after configuring table as table="COURSE" instead of table="SQLUSER.COURSE". And also please paste the entire code for Main.java.

Regards,
Naresh Waswani


Naresh Waswani
in Mkumar
Greenhorn

Joined: Sep 08, 2008
Posts: 20
dude,

Since your genegrator is assigned hence you need to set it's value explictly which is missing in your code base below.
So, set value like obj.setCourseId(1111); make sure COURSEID is declared in smaller in your pojo class. I am sure it will resolve the issue.



<id name="courseId" type="long">
<column name="COURSEID" />
<generator class="assigned" />
</id>


Your code -

Main obj=new Main();
System.out.println("main");
obj.saveCourse("Physics");
obj.saveCourse("Chemistry");
obj.saveCourse("Maths");

Shiva hari kumar Bala
Greenhorn

Joined: Feb 13, 2013
Posts: 3

try setting this property in you .cfg file

 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: org.hibernate.exception.SQLGrammarException: could not insert: [com.Course]
 
Similar Threads
org.hibernate.NonUniqueObjectException
Hibernate "Exception in thread "main" java.lang.ExceptionInInitializerError" problem....
hibernate3 : help find out the error
org.hibernate.PropertyAccessException
Initial SessionFactory creation failed. java.lang.AbstractMethodErro