1

私はこのクラスを持っています

interface UserInterface

それで

abstract class user implements UserInterface

それから私は2つの子クラスを持っています

Class Teacher extends User

Class Parent extends User

今dtabaseに私は3つのテーブルを持っています

  1. user table with id,password
  2. teacher with FK and other stuff
  3. parent with FK and other stuff

今、私はUserクラスを使用してログインをチェックしています。

私の問題は、従業員がログインすると、メモリ内のオブジェクトがユーザータイプになることです。どうすればEmployeeオブジェクトを取得できますか

私のモデルは間違っていて、別の方法で行う必要がありますか?

4

2 に答える 2

1

EmployeeがUserの3番目のサブクラスであるとすると、ユーザーがログインし、Hibernateを使用してデータベースからこのユーザーを取得し、このユーザーが実際に従業員である場合、HibernateはEmployeeインスタンスを返します。期待どおりに機能します。

そうでない場合は、何か間違ったことをしましたが、コードを見ずに判断することは不可能です。

于 2012-07-19T07:10:43.917 に答える
0

タイプのオブジェクトを休止状態で要求すると、User常にUserEnhancedByCGLib(または同様のもの)になります。Teacher(原則として)それをaまたはaにキャストすることはできませんParent

その問題を解決するには2つの選択肢があります。

1)ログイン時に、ユーザーが実際にはTeacher / Parentであることを知っています。最初に、UserオブジェクトではなくTeacher/Parentオブジェクトを休止状態で要求するよりも。

2)ログイン時にわからないのは、Userオブジェクトを使用して、実際に教師/親への専門化が必要になったときにデータベースに対して2番目のクエリを実行する必要があるためです。

2番目を行う1つの方法は次のとおりです。

public Object refresh(Object object) {
    if (object != null) {
        if (object instanceof HibernateProxy) {
            return ((HibernateProxy) object).getHibernateLazyInitializer().getImplementation();
        }
    }
    return object;
}

これは(メモリが役立つ場合)具体的なクラスを提供しますが、分離オブジェクトを提供します。

于 2012-07-19T07:22:04.567 に答える