3

というテーブルがありますcondition。その名前で保持する必要がありますが、コマンドを実行すると

Query qb = em.createQuery("SELECT c FROM Condition c ")

私はこの例外を受け取ります:

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 'condition' at line 1
at sun.reflect.GeneratedConstructorAccessor5.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:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2683)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2144)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2310)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:931)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:607)

MySQL には condition というコマンドがあることを知っているため、このコマンドで例外がスローされます。

テーブルの名前を条件として保持するフォームはありますか?それにより、次のコマンドを実行できますか?

Query qb = em.createQuery("SELECT c FROM Condition c ")
4

2 に答える 2

5

これは、conditionMySQLの予約済みキーワードであるためです。

これを試して:

Query qb = em.createQuery("SELECT c FROM `Condition` c ")

詳細については、スキーマ オブジェクト名を確認してください。

お役に立てば幸いです!

于 2013-04-08T14:00:01.893 に答える
4

CONDITION予約キーワードです。バッククォートを使用してエスケープする必要があります。

SELECT c FROM `Condition` c

識別子を変更する機会がある場合は、予約済みキーワード リストにないテーブル名を変更してください。これにより、将来の頭痛を避けることができます。

于 2013-04-08T13:59:05.057 に答える