大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 持久化對象的概念

持久化對象的概念

更新時間:2022-08-09 10:31:00 來源:動力節點 瀏覽1138次

1.簡介

該概念面向希望利用 IS 7 持久對象層(數據層)創建新持久對象或重用現有對象的開發人員.在處理持久對象開發之前,Intershop建議熟悉 Enfinity 定義語言、EDL 建模和業務對象開發。

持久對象和建模

由磁帶編碼的功能通常需要在數據庫中持久存儲信息。如果不存在合適的數據庫表,則必須創建新表。為了使管道等應用程序組件可以訪問這些數據庫表,需要在持久層創建新的持久對象。可能還需要實現額外的管理器類,這些管理器類對新的持久對象進行操作。

2.持久對象

(1)持久對象類

持久對象 (PO) 是用于將數據存儲到數據庫或從數據庫讀取數據的 Java 對象。采購訂單由四個(可選五個)文件組成:

表示持久對象的 PO 類 各個類都帶有后綴PO,例如ProductPO.java.

描述對象-關系映射(OR 映射)的描述符文件 描述符文件的文件擴展名為*.orm,例如ProductPO.orm.

用于生命周期管理的工廠類各個類都帶有后綴POFactory,例如ProductPOFactory.java.

用于標識持久對象的關鍵類 各個類都帶有后綴POKey,例如ProductPOKey.java.

如果模型定義了一個 key 一個備用 key-class相應的類帶有后綴POAlternateKey,例如. .Preference DefinitionPOAlternateKeyjava

這些類通常是墨盒內部封裝的一部分,不會公開。除了這個抽象基類的持久對象可能參與公共 API。

(2)對象關系映射

將類映射到表在 Intershop 7 中,單個 PO 映射到單個表或數據庫視圖。Intershop 7 中未使用其他可能性,例如將類映射到連接表或其他結構。PO 的每個實例對應于一行。類的屬性對應于列。類的主鍵屬性映射到表的主鍵,即用于唯一標識行的列(或列)。

映射和繼承關系Intershop 7 使用一種方法,根據這種方法,只有葉類映射到數據庫中,而超類必須是抽象的。葉類的表既包含從超類繼承的屬性,也包含它們自己的屬性。

(3)持久對象的基類

Intershop 7 中的許多 PO 派生自通用基類RegionalSettingsPOor ExtensibleObjectsPO,它們都是 com.intershop.beehive.core.capi.domain 的一部分。PersistentObjectPO自動提供一系列屬性,確保以與 Intershop 7 機制和流程兼容的方式定義這些屬性。自動提供的屬性 RegionalSettingsPO包括:

AUUID作為主鍵

樂觀控制屬性 ( oca)

domainID屬性

這是用于引用持久對象所屬域的外鍵屬性。派生自的類 RegionalSettingsPO自動繼承獲取和設置 的domainID方法,以及獲取和設置 . 引用的持久對象的域實例的方法domainID。

域getDomain () 
void  setDomain (Domain aDomain) 
String getDomainID () 
void  setDomainID (String aDomainID)

此外,ExtensibleObjectPO(的子類RegionalSettingsPO)提供了允許開發人員在運行時添加自定義屬性的功能,如參考 - 持久對象的屬性 - 可擴展對象屬性中所述。

(4)持久對象類的建模示例

以下 EDL 片段定義了一個持久對象,包括與其他對象的依賴關系。

命名空間 com.intershop.training.bc_warehouse.internal
{
  orm類 WarehousePO 擴展 ExtensibleObjectPO 實現 Warehouse
     {
      索引(地址ID);
      屬性名: string< 256 > 必填;
      屬性位置:字符串< 256 >;
      屬性容量: int ;
      屬性描述:字符串本地化;
      屬性地址ID:uuid;
      依賴地址:地址處理程序“com.intershop.beehive.core.capi.profile.ProfileMgr”
      {
        外鍵(addressID);
      }
      關系 stockItemPOs : StockPO[ 0. .n] 逆倉庫PO實現stockItems;
    }
}

3.持久對象之間的關系

通常,您的對象模型由一組不獨立的 PO 組成,而是以各種方式連接。在對象模型中,類之間的這些連接被建模為關系或依賴關系。

以下部分更詳細地描述了關系的所有方面。

(1)關系類型:關系和依賴關系

Intershop 7 基于兩種基本的關系類型:

關系

關系表示類之間的雙向語義連接。

以下 EDL 片段定義了兩個對象WarehousePO和StockPO. 側邊的關系定義WarehousePO:

關系 stockItemPOs : StockPO[ 0. .n]
逆倉庫PO實現stockItems;

側面關系定義StockPO:

關系倉庫PO: WarehousePO[ 1. . 1 ]
反向 stockItemPOs 實現倉庫
{
外鍵(倉庫ID) -> (UUID);
}

依賴關系

依賴關系表示類之間的單向關系。在這種情況下,“單向”意味著該關系只能在一個方向上導航。依賴關系通常用于在不同磁帶的持久類之間建立關系。

以下 EDL 片段(來自WarehousePO)對連接WarehousePO和Address. 它表示我們只能從WarehousePOto導航關系,而Address不是相反。

依賴地址:地址處理程序
“com.intershop.beehive.core....
capi.profile.ProfileMgr”
{
外鍵(addressID);
}

與關系相比,依賴關系在內部以非常不同的方式處理。依賴項未在 ORM 部署描述符文件中注冊,它們不需要重新創建引用的類。因此,依賴關系可用于將自定義 PO 類鏈接到 Intershop 7 提供的 CAPI 對象(例如Product)。

(2)關系的多樣性

根據關系每一方的多重性類型,通常區分三種基本類型的關系:

一對一

允許 [0..1] 到 [1..1];[1..1] 到 [0..1] 和 [0..1] 到 [0..1]。由于雞或蛋的困境,禁止 [1..1] 到 [1..1] 的關系。

一對多

允許 [1..1] 到 [0..n] 和 [0..1] 到 [0..n]。而 [0..1] 到 [1..n] 不是一個實際已知的用例。

多對多

多對多關系總是需要一個連接表來進行映射。

對于關系,多重性在定義中聲明。對于依賴項,多重性僅由代碼間接定義

1)一對多關系

一對多關系在關系數據庫設計中很常見,允許以經濟的方式表示復雜的數據集。例如,每個 WarehousePO 實例都指向屬于它的 StockPO 實例。同樣,每個StockPO指向它的WarehousePO.

為了將倉庫和庫存數據關聯起來,表中需要一個特殊的列,為每個實例StockPO標識正確的實例。這個特殊的列作為外鍵,它通常映射到相關表的主鍵,在我們的例子中,表。WarehousePOStockPOWarehousePO回到關系的表示,這意味著您必須引入一個特殊的屬性,該屬性用作外鍵并映射到相關 PO 類的主鍵屬性上。在一對多關系中,外鍵在類中定義多面, 例如, StockPO, 它映射到類的主鍵上一邊,例如,WarehousePO。

EDL 片段來自多面,例如StockPO:

索引(倉庫ID);
屬性warehouseID: uuid 必填 只讀;
關系倉庫PO: WarehousePO[ 1. . 1 ] 逆stockItemPOs實現倉庫
{
  外鍵(倉庫ID) -> (UUID);
}

對于一對多關系,代碼生成器為所涉及的兩個類創建特殊方法,多面和上的課一邊. 方法因所考慮的類別而異。

多端方法

為類生成的方法多面,例如,StockPO允許您訪問代表類的角色一邊,例如,WarehousePO。

public WarehousePO getWarehousePO ()

單方面的

方法一邊,例如,WarehousePO代碼生成器創建一個方法來訪問代表類的相關角色多面,例如StockPO:

公共集合getStockItemPOs () 
公共迭代器createStockItemPOsIterator ()

此外,代碼生成器創建關系包裝器方法。這些方法檢查特定元素是否參與關系:

public  boolean  isInStockItemPOs (StockPO anElement) 
public  int  getStockItemPOsCount ()

2)依賴

依賴關系是與實現的類的單向關系PersistentObject。單向意味著它們只能在一個方向上遍歷:從源類到目標類。目標類總是有多個0..1. 在下面的 EDL 片段WarehousePO中,依賴關系表示 的每個實例WarehousePO都與 的一個實例相關聯Address。與正常的關聯關系相反,依賴關系沒有表達相反的陳述,即每個實例Address都可以與一個或多個實例相關聯WarehousePO。Address不知道兩個實體之間的存在和WarehousePO 關系。但是,如果業務邏輯需要此功能,則可以確定所有實例WarehousePO通過使用查詢與給定地址相關。結果可能包含許多實例或僅包含一個實例,如果這受到實現的限制。因此,依賴于實現,依賴關系可以是一對多或一對一的關系。

依賴地址:地址處理程序“com.intershop.beehive.core.capi.profile.ProfileMgr”
{
  外鍵(addressID);
}

代碼生成器為依賴項創建的代碼只影響源類,而不影響目標類。Address因此,如果您創建的新 PO 與無法重新編譯或更改的現有對象(例如 )相結合,則依賴關系特別有用。

另一個常見的用例是隱藏與單側 PO位于同一墨盒中的 PO 的關系,因為它不打算使該 PO 的這種關系“公開”。在這種情況下,不能定義處理程序,并且調用 PO 的工廠以通過主鍵查找來定位相關實例。另一個用例是避免創建與海量數據的雙向關系。

以下 EDL 片段WarehousePO聲明了外鍵屬性addressID:

屬性地址ID:uuid;
索引(地址ID);

通常,依賴項將自定義 PO 與由 CAPI 接口表示的其他持久對象連接起來。

在我們的示例中,依賴項將自定義 POWarehousePO與標準 Intershop 7 CAPI 接口連接起來Address。在對這樣的依賴項進行建模時,您必須提供管理器的符號名稱,該管理器提供對 CAPI 接口后面對象的訪問。

代碼生成器使用提供的管理器來創建訪問器方法。

代碼生成器創建一個 getter 方法,它允許您訪問特定源類實例所連接到的目標類實例,以及一個用于將源實例分配給目標實例的 setter 方法。例如,對于與 連接的依賴WarehousePO,Address生成如下方法:

公共地址getAddress ()
 {
     if (getAddressIDNull())
    {
        返回 空值;
    }
    ProfileMgr 工廠 = (ProfileMgr) NamingMgr.getInstance().lookupManager(ProfileMgr.REGISTRY_NAME);
    return (Address) factory.resolveAddressFromID(getAddressID());
}
public  void  setAddress (地址地址)
 {
     if (address == null )
    {
        setAddressIDNull( true );
    }
    別的
    {
        setAddressID(address.getUUID());
    }
}

3)多對多關系

多對多關系在 Intershop 7 應用程序中很常見。例如,考慮產品和供應商之間的關系:每個供應商可能交付不止一種產品,而每種產品可能由不止一個供應商交付。或者,組合產品以形成新產品(例如,計算機、鼠標和監視器)的產品捆綁包可以捆綁成完整的計算機包。這里也存在多對多關系,因為每個產品包可以包含許多不同的產品,并且每個產品都可以是不同產品包的一部分。

考慮下圖,它表達了產品和產品包(同樣是產品)之間的關系。通過 assignment class ,通過將(引用產品捆綁包的 UUID 的外鍵屬性)的值與(引用捆綁包中的產品的外鍵屬性)的值BundleAssignmentPO配對,產品捆綁包與產品配對。兩個外鍵都映射到( ) 的主鍵。bundleIDproductIDProductUUID

(3)CAPI接口和持久對象

在許多用例中,持久對象實現了 CAPI 接口。該接口也可以建模或作為外部類型導入。以下 EDL 片段中顯示了在自定義 PO 之上建模的一組 CAPI 接口的示例:

導入 “enfinity:/demo/edl/com/intershop/demo/capi/Warehouse.edl”;
命名空間 com.intershop.demo.internal
{
  orm class  WarehousePO  extends  ExtensibleObjectPO  implements  Warehouse  { ... }
}
導入 “enfinity:/demo/edl/com/intershop/demo/capi/Stock.edl”;
命名空間 com.intershop.demo.internal
{
  oca orm class  StockPO 實現 Stock  { ... }
}

PO WarehousePO 實現了接口Warehouse。

PO StockPO 實現了 Stock 接口。

接口是 capi 包的一部分,而實現類是內部包的一部分。

請注意,PO 和接口使用不同的基類:

PO WarehousePO 繼承自抽象類com.intershop.beehive.core.capi.domain.ExtensibleObjectPO。

接口 Warehouse 擴展了接口com.intershop.beehive.core.capi.domain.ExtensibleObject。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产大学生一级毛片绿象 | 欧美午夜网站 | 中文字幕精品久久 | 久久精品久久精品久久精品 | 成在线人免费视频一区二区三区 | 久久精品久久精品久久精品 | 国产性videostv另类极品 | 国产婷婷色综合成人精品 | 国产高清在线精品二区一 | 9299yy看片淫黄大片在线 | 日日干夜夜草 | 黄色毛片小视频 | 日本一区二区在线播放 | 久久五月婷 | 99久久影院 | 成年女人午夜毛片免费看 | 在线亚洲国产精品区 | 一级日本高清视频免费观看 | 欧美美女一区 | 九九热这里只有国产精品 | 一区在线播放 | 久久网站免费观看 | 亚洲精品一区二区三区在 | 91国内在线观看 | 成人嫩草研究院永久网址 | 手机看片国产免费久久网 | 草草免费视频 | 黄色的视频免费看 | 中文字幕在线视频免费观看 | 一本伊大人香蕉高清在线观看 | 国产精品高清免费网站 | 午夜影网 | www亚洲精品| 欧美白人猛性xxxxx交69 | 亚洲国产成人久久一区二区三区 | 欧美色射| 中文字幕二区 | 99热久久久久久久免费观看 | 精品视频久久 | 国产精品久久新婚兰兰 | 天天看片夜夜爽 |