JPA 无法从实体自动生成表

标签 jpa eclipselink derby

我使用 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/

相关文章:

java - 无法在 Spring 3 中在 JPA 中保留实体

jpa - 使用 JPA(设计)备份数据库

java - 如何通过多重连接生成一些 JPA 实体?

java - 使用 Spring Data 在 eclipselink 中执行不带 SELECT 的 UPDATE

java - Derby 嵌入式数据库创建表结构

mysql - 对 Apache Olingo 与 MySQL、JPA 和 Tomcat Web 服务器生成的 OData 服务的 CRUD 操作

json - 使用JEST将ElasticSearch结果映射到JPA实体

java - EclipseLink MOXy,对象图中的循环

hadoop - 使用 Hive-2.0.1(Derby 支持)配置 HA 集群显示冗余数据库名称?

java - Derby:引用来自不同表的多个外键