web-dev-qa-db-ja.com

Junit HSQLDB-ユーザーに特権がないか、オブジェクトが見つかりません-THIS_.oh-ordnbr

列名にハイフン「-」が含まれていると、例外が発生します

    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)

誰かがこれを修正するのを手伝ってくれる?

8
Ram Subramanian

object not foundエラーの理由は、oh-ordnbr列が大文字と小文字を区別するように定義されているためです(これは二重引用符で囲むためです)。

次の2つの解決策があります。

  1. SQLではダッシュ(ハイフン)を使用しないでください。とにかく悪い習慣です。代わりにアンダースコアを使用してください。
  2. JPAアノテーションを次のように更新します。

      @Column(name = "`OH-ORDNBR`")
      private Integer ohOrdnbr;
    

ダッシュの代わりにアンダースコアを使用することを強くお勧めします。2番目のソリューションを使用するときに、さまざまなJPA実装がどのような奇妙さを持っているかは決してわかりません。

10
RudolphEst

構成ファイルに正しいプロバイダーがあることを確認してください。org.hibernate.ejb.HibernatePersistenceプロバイダーを提供することで同じ問題を修正しました。

1

Javaを介してHSQLスクリプトが実行され、新しいテーブルクエリの後にselect/alter/updateクエリが続く場合、常に「ユーザーに特権オブジェクトがありません」がスローされます。実際には、=で実行した後の作成クエリJavaステートメントはDBにコミットされず、永続化されないため、select/alter/updateを実行すると例外が発生します。クエリを1行ずつ実行し、各行をコミットすると、このエラーを回避できました。