簡體   English   中英

如何從Java中的父類對象加載子對象

[英]How to load child object from parent class object in java

我有這節課

interface UserInterface

然后

abstract class user implements UserInterface

那我有兩個孩子班

Class Teacher extends User

Class Parent extends User

現在在dtabase中我有三個表

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

現在,我正在使用User類檢查登錄名。

我的問題是,如果員工登錄,則內存中的對象將屬於用戶類型。 那我怎樣才能得到Employee對象

我的模型是錯誤的,我需要采取其他方式嗎?

假設Employee是User的第三個子類,那么如果一個用戶登錄,並且您使用Hibernate從數據庫中獲取了該用戶,而該用戶實際上是一個雇員,則Hibernate將返回一個Employee實例。 它可以像您期望的那樣工作。

如果沒有,那么您做錯了什么,但是如果不看代碼就無法分辨。

如果您向休眠狀態請求User類型的Object,則最終將始終以UserEnhancedByCGLib (或類似名稱)結尾。 您(原則上)不能將其交給TeacherParent

您有兩種選擇可以解決該問題。

1)在登錄時,您知道用戶實際上是教師/家長,而不是最初向休眠狀態請求教師/家長對象而不是用戶對象。

2)您在登錄時不知道,您實際上必須與User對象一起生活,並在確實需要教師/家長專業化后對數據庫進行第二次查詢。

處理數字2的一種方法是:

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

如果可以使用,它將為您提供具體的類,但提供一個分離的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM