使用 H2 数据库将 JPA 实体类中的 @Table 注解更改为“users”时出现问题

问题描述 投票:0回答:1

我的 Java 应用程序遇到问题,更改实体类中的

@Table
名称会导致应用程序在测试和运行时失败。详情如下:

本来我的实体类定义如下:

@ApiModel
@XStreamAlias("user")
@Entity
@Table(name = "user")
public class User {
// ...
}

应用程序在此设置下运行良好。然而,当我更新

@Table
注释将表名从“user”更改为“users”时,如下所示:

@ApiModel
@XStreamAlias("user")
@Entity
@Table(name = "users")
public class User {
// ...
}

我在运行

mvn test
和应用程序启动期间开始出现错误。错误信息是:

org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USERS" not found; SQL statement:
ALTER TABLE USERS ADD CONSTRAINT USERS_FK1 FOREIGN KEY (SUBSCRIPTION_ID) REFERENCES SUBSCRIPTIONS (SUBSCRIPTIONID)  [42102-200]

有趣的是,如果我将表名称恢复为“user”,一切都会再次正常工作。这让我想知道这个问题是否与我用于测试的H2数据库有关,或者是否有更深层次的原因导致了这个问题。

什么可能导致此错误?我什至将 JPA 注释中的表名称更改为其他名称,并且效果很好。那么为什么“用户”这个名字会特别引起问题呢?

java database jpa jdbc h2
1个回答
0
投票

将Java实体类中的表名从“user”更改为“users”的问题可能是由于区分大小写或“users”是用于测试的H2数据库中的保留关键字。

要解决此问题,请在

persistence.xml
配置文件中添加一个属性以显式处理区分大小写。这是简化的解决方案:

 @Entity
-@Table(name = "user")
+@Table(name = "users")
 public class User {
     @Id

persistence.xml
中,添加以下属性:

<property name="datanucleus.identifier.case" value="MixedCase"/>

此属性可确保表名称完全按照注释中所写的方式处理,从而解决任何区分大小写的问题。

© www.soinside.com 2019 - 2024. All rights reserved.