hsqldb - Junit HSQLDB - 用户缺少权限或找不到对象 - THIS_.oh-ordnbr

标签 hsqldb spring-junit

当我的列名包含连字符“-”时出现异常

    Entity : this is the entity name.
    @Entity
    @Table(name = "RequestHeader")
    public class RequestHeader implements Serializable { 
    ....
    ....    
    @Column(name = "`oh-ordnbr`")
    private Integer ohOrdnbr;

模式定义:这是模式创建的查询。
    CREATE MEMORY TABLE PUB.REQUESTHEADER(
           REQUESTID INTEGER,
           IMUSERID INTEGER,
           REQUESTDATE DATE,
           REQUESTTIME INTEGER,
           REQUESTSTATUS VARCHAR(19),
           REQUESTTYPE VARCHAR(22),
           HEADERINSTRUCTIONS VARCHAR(5150),
           DATEFORMAT VARCHAR(20),
           TIMEFORMAT VARCHAR(20),
           LANGUAGEID INTEGER,
           "OH-ORDNBR" INTEGER,
           "OH-TRCNSTAMP" INTEGER,
           ISPICKUPLIST BIT(1),
           CONSTRAINT "RQH-1" PRIMARY KEY(REQUESTID)
     );

错误如下:
Exception Stack: Error message which I have received by running the Junit.
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: THIS_.oh-ordnbr
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.ExpressionColumn.checkColumnsResolved(Unknown Source)
at org.hsqldb.QueryExpression.resolve(Unknown Source)
at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
at org.hsqldb.Session.compileStatement(Unknown Source)
at org.hsqldb.StatementManager.compile(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)

有人可以帮我解决这个问题吗?

最佳答案

的原因未找到对象 错误在于 oh-ordnbr 列被定义为区分大小写(这是由于您在它周围加上了双引号)。

您有两种可能的解决方案:

  • 不要在 SQL 中使用破折号(连字符)。无论如何,这是不好的做法,请改用下划线。
  • 更新 JPA 注释如下:
      @Column(name = "`OH-ORDNBR`")
      private Integer ohOrdnbr;
    

  • 我强烈建议使用下划线而不是破折号,您永远不知道使用第二种解决方案时不同的 JPA 实现可能有什么奇怪的地方。

    关于hsqldb - Junit HSQLDB - 用户缺少权限或找不到对象 - THIS_.oh-ordnbr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29905683/

    相关文章:

    java - 用于 Spring Boot 应用程序中集成测试的内存数据库配置(HSQLDB)

    java - 在 Hsqldb/H2 中进行单元测试的 SequenceGenerator 问题

    hibernate :java. lang.NoSuchMethodError :javax/validation/spi/ConfigurationState. getParameterNameProvider()Ljavax/validation/ParameterNameProvider

    java - Spring:为什么在每个测试类结束时不调用@PreDestroy?

    java - 如何使用 AssertJ 检查一个属性值计数的对象列表?

    java - 带有 session 对象的 Spring Junit - 在 Controller 中不可见

    unit-testing - 为什么使用内存数据库时此 NamedQuery 不起作用?

    java - 无法查询特定范围内的日期条件

    java - 选择 HSQLDB 中 100 多百万行