我使用 Eclipselink 和 Derby 数据库来自动从实体生成数据库。
生成一开始工作得很好,但是当我将用户实体添加到模型中并尝试使用 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;
}
谁能告诉我为什么我会遇到异常?
提前致谢
最佳答案
您的表名称是“USER”
,它是 SQL 中(以及 Apache Derby)中的保留关键字。一些 JPA 提供商(例如 DataNucleus JPA)会自动为您引用此类关键字,这意味着它可以正常工作。其他(例如 EclipseLink)则不然,因此您必须用引号 (') 显式设置表名称,或者将表名称设置为不是 SQL 关键字的名称
@Table(name="'User'")
public class User {...}
关于JPA 无法从实体自动生成表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39677855/