0

私はと働いていHibernate 3.5.5ますHSQLDB 2.2.9。私は JPA セマンティクスを使用してエンティティを定義し、約 10 個のエンティティを持っています。

なんらかの理由で、HSQLDB エクスプローラーで対応するテーブルが見つからず、それらのテーブルを参照すると SQL 例外が発生するため、HSQLDB は 3 つのエンティティを選択していないようですuser lacks privilege or object not found: <TableName>

3 つのエンティティはすべて、他のエンティティと同じ形式で、次のようになります。

@Entity
@Table(name = "<TABLE_NAME>")
public class TableName
{
     // private members;

     // protected default constructor for the ORM

     @Id
     @Column(name = <PRIMARY_KEY>)
     // public getter for Primary Key member.

     @Column(name = <COLUMN_NAME>)
     // public getters for all other members;

     // protected setters
}

HSQLDB が一部のエンティティをスキップするという同様の問題に直面した人はいますか?

少なくとも、同じ 3 つのエンティティを一貫してスキップしており、他のエンティティとの違いを理解できません。これらのエンティティはすべて、Eclipse の JPA ファセットを使用して生成されるため、これらの間に違いはありません。

編集1

私のpersistence.xmlは単にこれを持っています:

<persistence-unit name="fssPersistenceUnit" transaction-type="RESOURCE_LOCAL">
</persistence-unit>

および HSQLDB 2.0 では、注釈が付けられたすべてのエンティティを選択していましたが@Entity、HSQLDB 2.2.9 はすべてを選択せず​​、前述のように 3 つのエンティティを残します。

編集 2 : SQL ステートメントのロギングを有効にした後、これら 3 つのテーブルの CREATE TABLE ステートメントがロールバックされていることがわかります。これらの create table ステートメントの何が問題だったのかについて、これ以上の情報を得ることができません。また、印刷時に CREATE TABLE ステートメントが切り捨てられます。

4

2 に答える 2

1

HSQLDB の Hibernate 方言は、Hibernate 3.6 以降で更新されました。3.5.x が HSQLDB 2.2.x でうまく動作するかどうかは不明です

いずれの場合でも、file: データベースを使用して、hsqldb.sqllog=2 プロパティをデータベース URL に追加できます。これにより、実行されたすべての SQL ステートメントのログが生成されます。次に、欠落しているテーブルのステートメントを確認できます。

ガイドを参照してください:

http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html

于 2012-11-28T18:06:55.240 に答える
0

さて、実際にはコードにこの正確なテキストが含まれていないと思います。

@Entity
@Table(name = "<TABLE_NAME>")
public class TableName

(実際の<TABLE_NAME>文字列を使用)が、一般的な/疑似コードの例としてそれを書いたこと。(文字列 " " を実際に使用する<TABLE_NAME>と、休止状態では無効な文字列になり、スキーマが作成されないためです)。

Hibernate によって作成されたテーブルを持たないエンティティで使用する実際のテーブルと列の名前を教えていただけますか? 場合によっては、基になるデータベース(あなたの場合はHSQLDB)にテーブルや名前を許可しない予約語がいくつかあり、その場合は黙って失敗する可能性があります(PostgreSQLとMySQLでこれに出くわしました。 Hibernate で生成されたスキーマは MySQL で機能しますが、PostgreSQL で特定のテーブルを作成するのに暗黙のうちに失敗します。これは、特定のテーブル名が後者によって「好まれていない」ためです)。

同じことがフィールド/列名にも当てはまります。

于 2012-11-28T13:34:29.700 に答える