JPA 无法从实体自动生成 table
JPA failed to automatically generate a table from an entity
我将 Eclipselink 与 Derby 数据库一起使用,以从实体自动生成数据库。
这一代一开始工作得很好,但是当我将一个用户实体添加到我的模型并尝试使用 JPA 工具从实体生成 table 时,所有 table 都生成了,除了用户 table & 我在生成过程中收到以下错误
[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 是 Derby 数据库中的一个函数(请参阅:http://db.apache.org/derby/docs/10.10/ref/rrefsqlj42476.html)。您可以将 JPA bean 作为 User ,但使用 @Table annotation
指定不同的 table 名称
您的 table 名称是 "USER"
,这是 SQL(以及 Apache Derby)中的保留关键字。一些 JPA 提供程序(例如 DataNucleus JPA)会自动为您引用此类关键字,这意味着它可以正常工作。其他(例如 EclipseLink)不这样做,因此您必须显式设置带有引号 (') 的 table 名称或将 table 名称设置为不是 SQL 关键字的名称
@Table(name="'User'")
public class User {...}
我将 Eclipselink 与 Derby 数据库一起使用,以从实体自动生成数据库。
这一代一开始工作得很好,但是当我将一个用户实体添加到我的模型并尝试使用 JPA 工具从实体生成 table 时,所有 table 都生成了,除了用户 table & 我在生成过程中收到以下错误
[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 是 Derby 数据库中的一个函数(请参阅:http://db.apache.org/derby/docs/10.10/ref/rrefsqlj42476.html)。您可以将 JPA bean 作为 User ,但使用 @Table annotation
指定不同的 table 名称您的 table 名称是 "USER"
,这是 SQL(以及 Apache Derby)中的保留关键字。一些 JPA 提供程序(例如 DataNucleus JPA)会自动为您引用此类关键字,这意味着它可以正常工作。其他(例如 EclipseLink)不这样做,因此您必须显式设置带有引号 (') 的 table 名称或将 table 名称设置为不是 SQL 关键字的名称
@Table(name="'User'")
public class User {...}