我正在使用Hibernate來訪問我的Java應用程序的MySQL數據庫。我使用this instructions配置Hibernate。現在我想查詢我的數據庫;使用此代碼:使用Hibernate的MySQL:org.hibernate.exception.SQLGrammarException
java.util.List categList = null;
SessionFactory sessionFacoryt ;
sessionFacoryt = NewHibernateUtil.getSessionFactory();
org.hibernate.classic.Session hiberanateSession = sessionFacoryt.getCurrentSession();
String HQL = "select r from RssCategory r";
Transaction transaction = hiberanateSession.beginTransaction();
org.hibernate.Query q = hiberanateSession.createQuery(HQL);
// here is the Exception cause line
categList = q.list();
正如您所見,因爲最後一行;我看到這個例外:
Oct 23, 2011 3:20:25 PM org.hibernate.util.JDBCExceptionReporter
logExceptions WARNING: SQL Error: 1064, SQLState: 42000 Oct 23, 2011
3:20:25 PM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near '-IPTV-EPG.rss_category rsscategor0_' at line 1
org.hibernate.exception.SQLGrammarException: could not execute query at
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67) at
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2223) at
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) at
org.hibernate.loader.Loader.list(Loader.java:2099) at
org.hibernate.hql.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:912) at
org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172) at
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121) at
org.hibernate.impl.QueryImpl.list(QueryImpl.java:79) at
RSS.connectHtmlandleRSS.addTODB(connectHtmlandleRSS.java:206) at
RSS.connectHtmlandleRSS.access$000(connectHtmlandleRSS.java:37) at
RSS.connectHtmlandleRSS$1.run(connectHtmlandleRSS.java:163) Caused by:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an
error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near
'-IPTV-EPG.rss_category rsscategor0_' at line 1 at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at
java.lang.reflect.Constructor.newInstance(Constructor.java:513) at
com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at
com.mysql.jdbc.Util.getInstance(Util.java:384) at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054) at
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566) at
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498) at
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) at
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) at
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) at
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113) at
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275) at
org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186) at
org.hibernate.loader.Loader.getResultSet(Loader.java:1787) at
org.hibernate.loader.Loader.doQuery(Loader.java:674) at
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) at
org.hibernate.loader.Loader.doList(Loader.java:2220)
任何人都可以指導我這個例外的原因? 謝謝。
這裏是爲RssCategory生成的映射;這個類被生成到這個包sakila.entity。
<hibernate-mapping>
<class name="sakila.entity.RssCategory" table="rss_category" catalog="SAMIM-IPTV-EPG">
<id name="catId" type="int">
<column name="cat_id" />
<generator class="assigned" />
</id>
<property name="catName" type="string">
<column name="cat_name" length="45" not-null="true" unique="true" />
</property>
<set name="rssNewses" inverse="true" table="rss_to_cat">
<key>
<column name="cat_id" not-null="true" />
</key>
<many-to-many entity-name="sakila.entity.RssNews">
<column name="rss_id" not-null="true" />
</many-to-many>
</set>
</class> </hibernate-mapping>
這裏是rss_category生成的SQL代碼:
CREATE TABLE `rss_category` (
`cat_id` int(11) NOT NULL,
`cat_name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`cat_id`),
UNIQUE KEY `cat_name_UNIQUE` (`cat_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
和Hibernate生成的HQL查詢:
Hibernate: select rsscategor0_.cat_id as cat1_4_, rsscategor0_.cat_name as cat2_4_ from SAMIM-IPTV-EPG.rss_category rsscategor0_
請顯示生成的SQL查詢和RssCategory表的定義。你確定所有的專欄都在嗎? –
這是爲rss_category表生成的SQL代碼。請在問題結尾處查看我的編輯。 – sajad
是的,但是Hibernate爲您的HQL查詢生成的SQL查詢是什麼? –