簡體   English   中英

Hibernate-具有作為接口的屬性的實體類

[英]Hibernate - Entity class having an attribute that is an interface

我已經研究了這個主題,發現不是很老的帖子,還是不是我想要解決的問題。 我已經使用Hibernate多年了,並且我認為自己精通它。 在將持久性層中的繼承用作子類(用於醫院系統)之前,我曾在繼承層中使用繼承來表示不同類型的訂單,以取得良好的效果。

我正在為商店設計一個新項目,但我不確定Hibernate是否可以解決這個問題。 基本上,我允許用戶構造Bill對象,這些對象包含您希望在帳單中獲取的信息:客戶名稱,帳單號,總金額,稅金等。 每個Bill對象包含一組OrderedProduct對象,這些對象又包含一個Product對象和一個數量。 僅此一項要求,我的項目實際上就完成了,並且一切正常。

我的客戶現在要加價,但我不確定該如何解決。 我被要求允許構建Kit對象,這些對象不過是一組帶有價格的Product對象,可以為經常一起購買的某些商品提供折扣。 小菜一碟,我建立了一個GUI來構建和保留這些對象,但是現在我遇到一個問題:如何將這些Kit對象連接到Bill中? 我的OrderedProduct對象當前綁定到一個Product對象,並且此模型顯然與此新要求不兼容。

我無法使用繼承(據我所知),因為Kit基本上只不過是一個降價產品清單。 如果這兩個類都是從同一個抽象類中繼承的,那么一個類如何包含另一個類呢?

我開始構建它的方式是使用Billable接口。 允許選擇產品/套件的下拉菜單使用以下代碼填充自身:

items = FXCollections.observableArrayList(productService.findAllInInventory());

@Override
public List<Billable> findAllInInventory() 
{
    List<Product> products = findProductsInInventory();
    List<Kit> kits = findKitsInInventory();

    List<Billable> billables = new ArrayList<>();

    billables.addAll(products);
    billables.addAll(kits);

    return billables;
}

這允許一個下拉菜單包含兩種類型的實體,同時對用戶完全無縫。 直到我意識到:不能讓實體類的屬性成為接口類型(據我所知),我才開始采用這種概念來適應其余的賬單創建GUI。

很抱歉提供冗長的解釋,我希望我想做的清楚。 我可以想到一些解決方法(不太理想),但是如果有人對如何設計此模型有所了解,我會很樂意聽到的!

謝謝

結論是您不能將實體類的持久屬性作為接口類型。 如果您的設計最終需要這種結構,那么(現在)您將不得不重新構造事物。

暫無
暫無

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

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