2013-11-01 15 views
1

我们有一个项目包括Eclipselink和MySQL。Intellij IDEA jpa控制台问题从具有特定列的表中选择

例如,如果我们用简单的查询:

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"); 

如果我们运行它,我们看到(在调试模式),在生成的查询所有名括有`符号。

回答

3

key是MySQL数据库的保留关键字(见MySQL: Reserved Words)。
所以你应该在映射中转义保留关键字。
你可以做到这一点通过以下方式:

@Table 
@Entity 
public class ExampleTable implement Serializable 
{ 
    // ... 
    @Column(name = "'key'") // or @Column(name = "\"key\"") 
    private String key; 
    //... 
} 
+0

谢谢,但如果我们做到这一点的EclipseLink它transformes:选择\' '键' \'FROM ExampleTable;并与MySQLSyntaxErrorException:未知的列''键''。 –

+0

@LemonTree你是如何用这样的列(键)创建表的? – Ilya

+0

这是遗产。系统太重,而且要更改列名称。 –