列名にハイフン「-」が含まれていると、例外が発生します
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)
誰かがこれを修正するのを手伝ってくれる?
object not foundエラーの理由は、oh-ordnbr列が大文字と小文字を区別するように定義されているためです(これは二重引用符で囲むためです)。
次の2つの解決策があります。
JPAアノテーションを次のように更新します。
@Column(name = "`OH-ORDNBR`")
private Integer ohOrdnbr;
ダッシュの代わりにアンダースコアを使用することを強くお勧めします。2番目のソリューションを使用するときに、さまざまなJPA実装がどのような奇妙さを持っているかは決してわかりません。
構成ファイルに正しいプロバイダーがあることを確認してください。org.hibernate.ejb.HibernatePersistenceプロバイダーを提供することで同じ問題を修正しました。
Javaを介してHSQLスクリプトが実行され、新しいテーブルクエリの後にselect/alter/updateクエリが続く場合、常に「ユーザーに特権オブジェクトがありません」がスローされます。実際には、=で実行した後の作成クエリJavaステートメントはDBにコミットされず、永続化されないため、select/alter/updateを実行すると例外が発生します。クエリを1行ずつ実行し、各行をコミットすると、このエラーを回避できました。