2009-08-05 15 views
1

これに対処する質問が既にある場合は、私が見つけられないのでリンクを取得できますか?Hibernateからクラス名を取得する方法は?

私は、Hibernateデータベースに格納されているオブジェクトの保存されたクラス名を取得したいと考えています。私は外部でデータベースを見ると、クラス名を持つ文字列が格納されているのがわかります。オブジェクトを構築せずにクラス名を取得するにはどうすればよいですか?

ありがとうございます。

編集:いいえ特にディスクリミネータを指定していません。これらは実際にはサブクラスが格納されています。私は単にオブジェクトの実際のサブクラスを取得しようとしています。

+0

私が知っている限り、Hibernateはクラス名をデータベースに格納しません。 xml構成ファイルまたは注釈付きクラスのいずれかからマッピングを取得します。 – Dave

+0

それはしています。私はpgAdminを開いており、データベース列の1つにクラス名の類似点が見えます。それは正確なクラス名ではありませんが、私の目的には十分です。 – AlbertoPL

+0

あなたがサブクラスを使用していて、明示的に値を定義していない場合、データベースのクラス名が表示されると思う唯一の方法です。その場合、Hibernateはクラス名を識別子として使用します。私は、あなたが達成しようとしているものについて詳述することをお勧めします。 –

答えて

1

インスタンスがデータベース形式にどのようにマップされるかによって、いくつかの方法があります。いずれの場合も、最初のステップは、マッピング設定(the API docsを参照)を含むHibernateのConfigurationインスタンスを保持することです。

ルートオブジェクトはConfigurationです。検索する情報はおそらくgetTableMappings()で返されます。あなたはデバッガとHibernateのソースを使用しなければならないでしょうし、すべての仕組みを理解するためにある程度時間を費やす必要があります。

Springを使用している場合は、Configurationオブジェクトにアクセスする方法を理解する必要があります。あなたの最善の策は、Configuration.buildSessionFactory()にブレークポイントを設定することです。それはあなたに考えを与えるはずです。

+0

私は確かにこれを調べます、ありがとうございます。 – AlbertoPL

+1

http://stackoverflow.com/questions/516906 - その答えは、すべてのマッピングをループする方法を示しています。 PersistentClass.getTableはテーブル名を取得するので、テーブルから始める場合は、必要なものが見つかるまですべてのクラスマッピングをループすることができます。 1つのテーブルが複数のクラスにマップできるため、サブクラスではこの問題が混乱する可能性があります。 –

+0

@Brian:これを回答として投稿する必要があります:) –

0

タイプを保存したオブジェクトに新しいフィールドを作成しました。これは私が私の解答に使ったものですが、弁別者の値にアクセスする方法についてはまだ答えが欲しいと思います。

関連する問題