0

プロジェクトでJPAアノテーションを使用してエンティティクラスの一部を再利用しようとしています。しかし残念ながら、私はHibernateとJPAの初心者でもあります。コマンド「grailsgenerate-all」を使用してコントローラーを生成しようとすると、エラーが発生します。

generate-allの実行中にエラーが発生しました:「messageSource」という名前のBeanの作成中にエラーが発生しました:Beanの初期化に失敗しました。ネストされた例外はorg.springframework.beans.factory.BeanCreationExceptionです:「transactionManager」という名前のBeanの作成中にエラーが発生しました:Beanプロパティ「sessionFactory」の設定中にBean「sessionFactory」への参照を解決できません。ネストされた例外はorg.springframework.beans.factory.BeanCreationExceptionです:「sessionFactory」という名前のBeanの作成中にエラーが発生しました:initメソッドの呼び出しに失敗しました。ネストされた例外はorg.hibernate.PropertyNotFoundExceptionです:クラスexample.MyBeanでプロパティバージョンのセッターが見つかりませんでした

非常に簡単な解決策があります。ゲッター/セッターのペアでフィールド「バージョン」を追加します。ただし、エンティティクラスを変更したくないのは、他のいくつかの非グレイルプロジェクトでそれらを再利用したい場合があるためです。エンティティクラスですでに使用されているアノテーションを複製せずに、JPAアノテーションを休止状態のマッピングファイルと一緒に使用する方法はありますか?

はい、そしてまた、これは良い考えですか、それとももっと良いアプローチがありますか?

4

2 に答える 2

1

xmlマッピングファイルには次のものがあります。

<hibernate-mapping default-access="field">

default-access(オプション-デフォルトはproperty):Hibernateがすべてのプロパティにアクセスするために使用する必要がある戦略。

に設定されている場合field、hibernateはゲッターを必要とせずにフィールドを直接読み取ります。

もちろん、少なくともフィールドが必要です。存在しない任意のプロパティをマップすることはできません。(まあ、おそらくあなたはいくつかの「魔法」でできるかもしれませんが、私はそれに反対することをお勧めします)

于 2011-04-19T11:43:27.687 に答える
1

楽観的ロックが必要ですか? これをオフにすると治ると思います。

class/optimistic-lock 属性を使用して、グローバルまたはクラス単位で hibernate 構成を介して行う必要があります。または、hibernate アノテーションをクラスに追加することもできますが、これは明らかにクラスを変更することを意味し、hibernate を使用していることを前提としています。

aop コンパイラを使用して、バージョン フィールド/ゲッター/セッターまたは注釈をビルド ドメイン モデルに織り込むこともできます。

于 2011-04-19T11:51:22.323 に答える