1

Eclipselink と MySQL を含むプロジェクトがあります。

たとえば、単純なクエリを使用する場合:

SELECT a from ExampleTable a

次のように変換されます。

SELECT `id`, `code`, `high`, `key`, `name`, `regionalCode` FROM `ExampleTable`

JPAコンソールを使用している場合、次のようなものが得られます。

SELECT id, code, high, key, name, regionalCode FROM ExampleTable

とエラーメッセージ

[42000][1064] 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 'key, name, regionalCode FROM ExampleTable' at line 1

問題は「キー」列ですが、名前を変更する機会がありません。

それを修正するオプションを見つけようとしましたが、結果はありません。

答えがない場合は、バグレポートを作成するのが良い方法だと思います。

列の囲まれた名前を取得する方法

EntityManagerを使用しています

EntityManager em;
...
TypedQuery = em.createQuery("SELECT et FROM ExampleTable et");

これを実行すると、(デバッグ モードで) 生成されたクエリ内のすべての名前が ` 記号で囲まれていることがわかります。

4

1 に答える 1

2

keyMySQL データベースの予約キーワードです ( MySQL: Reserved Wordsを参照)。
そのため、マッピングで予約済みキーワードをエスケープする必要があります。
次の方法でそれを行うことができます。

@Table
@Entity
public class ExampleTable implement Serializable
{
   // ...
   @Column(name = "'key'") // or @Column(name = "\"key\"")
   private String key;
   //...
}
于 2013-11-01T23:02:44.023 に答える