1

Hibernate/Spring で単一のモデル クラスとして扱いたい 2 つのテーブルがありますが、それらの唯一の関係は 3 番目のテーブルを介して確立できます。例えば...

tableA {  
   id integer <PK>
   username varchar2(25 byte)
}
tableB {
   personID varchar2(15 byte) <PK>
   divisionID integer
   positionID integer
}
tableC {
   personID varchar2(10) <FK>
   username varchar2(25 byte)
}

personID を tableA の列として単純に追加できれば非常に便利ですが、状況によっては許可されません。ただし、以下のような休止状態の 1 つのモデルを使用してこれらのテーブルを操作したいと思います...

@Entity
@Table(name="tableA")
public class myTable {
   @Id
   @GeneratedValue
   private int id;
   private String username;
   @Formula("(select distinct tableC.personID from tableC where upper(tableC.username) = upper(THIS_.username) and tableC.personID is not null)")
   String personID;
   @Formula("(select distinct tableB.divisionID from tableB where tableB.personID = THIS_.personID)")
   int divisionID;
   @Formula("(select distinct tableB.oositionID from tableB where tableB.personID = THIS_.personID)")
   int positionID;

   //getters, setters, etc...
}

ここに書いた方法は不可能であることはわかっています。ただ、その考えを伝えようとしているだけです。後でデータベースを保存または更新するときに、Hibernate が各属性の適切なテーブルを更新できるようにしたいと考えています。

@Transient、@SecondaryTables、および他のいくつかを使用して調査しましたが、これを機能させる良い方法が見つかりませんでした。私がやりたいようにこれを行うことは可能ですか?もしそうなら、どのアプローチ/注釈を使用する必要がありますか? そうでない場合、どのような代替アプローチをとるべきですか? 私はHibernateとSpringに比較的慣れていないので、ご容赦ください。

4

2 に答える 2

0

これを行う方法があると確信しています。答えはありません。

しかし、あなたの質問は、あなたがHibernateについて適切に考えていないことを私に示唆しています。これはORMツールです-オブジェクト-リレーショナルマッピング。テーブルとSQLの観点から、値をプリミティブにロードすることだけを考えているのであれば、Hibernateは適切なツールではありません。

SimpleJdbcTemplateデータをマップするオブジェクトがない場合は、HibernateではなくSpringを使用することをお勧めします。

于 2012-12-10T18:45:16.917 に答える
0

これを見てください永続的に複数のテーブルを使用する

于 2012-12-11T07:12:10.607 に答える