2016-09-24 46 views
1

我正在使用Eclipselink和Derby數據庫自動從實體生成數據庫。JPA未能自動從實體生成表

該代人一開始工作得很好,但是當我添加一個用戶實體到我的模型並試圖從JPA工具實體生成表時,除了用戶表&我生成了以下錯誤

[EL Warning]: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.1.v20150605-31e8258): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "USER" at line 1, column 14. 
Error Code: 30000 

這是用戶實體

@NamedQuery(name = "User.findByUsername", query = "SELECT u FROM User u WHERE u.username = :userneme AND u.password = :password") 
@Entity 
public class User implements Serializable { 

    @Transient 
    private static final long serialVersionUID = 1L; 

    public User() { 
     super(); 
    } 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

    private String username; 
    private String password; 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

誰能告訴我爲什麼我收到異常?

在此先感謝

回答

2

您的表名是"USER",它是SQL(和Apache Derby中)的保留關鍵字。某些JPA提供者(例如DataNucleus JPA)會自動爲您引用這些關鍵字,這意味着它只會起作用。其他人(如EclipseLink)不這樣做,所以你必須明確地設置表名與周圍的引號(')或將表名設置爲非SQL關鍵字

@Table(name="'User'") 
public class User {...} 
+0

它通過添加引號不起作用..它通過完全更改名稱..感謝您的答覆 –

1

這最有可能是因爲用戶在Derby數據庫的函數(請參閱本:http://db.apache.org/derby/docs/10.10/ref/rrefsqlj42476.html)。您可以將JPA bean作爲用戶,但使用@Table註釋指定不同的表名

+0

我正在使用Derby not H2數據庫,但它與德比合作..謝謝 –

+0

對不起,我更新了網址。再次感謝 –