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

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 持久化對(duì)象的概念

持久化對(duì)象的概念

更新時(shí)間:2022-08-09 10:31:00 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1272次

1.簡(jiǎn)介

該概念面向希望利用 IS 7 持久對(duì)象層(數(shù)據(jù)層)創(chuàng)建新持久對(duì)象或重用現(xiàn)有對(duì)象的開發(fā)人員.在處理持久對(duì)象開發(fā)之前,Intershop建議熟悉 Enfinity 定義語言、EDL 建模和業(yè)務(wù)對(duì)象開發(fā)。

持久對(duì)象和建模

由磁帶編碼的功能通常需要在數(shù)據(jù)庫(kù)中持久存儲(chǔ)信息。如果不存在合適的數(shù)據(jù)庫(kù)表,則必須創(chuàng)建新表。為了使管道等應(yīng)用程序組件可以訪問這些數(shù)據(jù)庫(kù)表,需要在持久層創(chuàng)建新的持久對(duì)象??赡苓€需要實(shí)現(xiàn)額外的管理器類,這些管理器類對(duì)新的持久對(duì)象進(jìn)行操作。

2.持久對(duì)象

(1)持久對(duì)象類

持久對(duì)象 (PO) 是用于將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)或從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)的 Java 對(duì)象。采購(gòu)訂單由四個(gè)(可選五個(gè))文件組成:

表示持久對(duì)象的 PO 類 各個(gè)類都帶有后綴PO,例如ProductPO.java.

描述對(duì)象-關(guān)系映射(OR 映射)的描述符文件 描述符文件的文件擴(kuò)展名為*.orm,例如ProductPO.orm.

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

用于標(biāo)識(shí)持久對(duì)象的關(guān)鍵類 各個(gè)類都帶有后綴POKey,例如ProductPOKey.java.

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

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

(2)對(duì)象關(guān)系映射

將類映射到表在 Intershop 7 中,單個(gè) PO 映射到單個(gè)表或數(shù)據(jù)庫(kù)視圖。Intershop 7 中未使用其他可能性,例如將類映射到連接表或其他結(jié)構(gòu)。PO 的每個(gè)實(shí)例對(duì)應(yīng)于一行。類的屬性對(duì)應(yīng)于列。類的主鍵屬性映射到表的主鍵,即用于唯一標(biāo)識(shí)行的列(或列)。

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

(3)持久對(duì)象的基類

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

AUUID作為主鍵

樂觀控制屬性 ( oca)

domainID屬性

這是用于引用持久對(duì)象所屬域的外鍵屬性。派生自的類 RegionalSettingsPO自動(dòng)繼承獲取和設(shè)置 的domainID方法,以及獲取和設(shè)置 . 引用的持久對(duì)象的域?qū)嵗姆椒╠omainID。

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

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

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

以下 EDL 片段定義了一個(gè)持久對(duì)象,包括與其他對(duì)象的依賴關(guān)系。

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

3.持久對(duì)象之間的關(guān)系

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

以下部分更詳細(xì)地描述了關(guān)系的所有方面。

(1)關(guān)系類型:關(guān)系和依賴關(guān)系

Intershop 7 基于兩種基本的關(guān)系類型:

關(guān)系

關(guān)系表示類之間的雙向語義連接。

以下 EDL 片段定義了兩個(gè)對(duì)象WarehousePO和StockPO. 側(cè)邊的關(guān)系定義WarehousePO:

關(guān)系 stockItemPOs : StockPO[ 0. .n]
逆?zhèn)}庫(kù)PO實(shí)現(xiàn)stockItems;

側(cè)面關(guān)系定義StockPO:

關(guān)系倉(cāng)庫(kù)PO: WarehousePO[ 1. . 1 ]
反向 stockItemPOs 實(shí)現(xiàn)倉(cāng)庫(kù)
{
外鍵(倉(cāng)庫(kù)ID) -> (UUID);
}

依賴關(guān)系

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

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

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

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

(2)關(guān)系的多樣性

根據(jù)關(guān)系每一方的多重性類型,通常區(qū)分三種基本類型的關(guān)系:

一對(duì)一

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

一對(duì)多

允許 [1..1] 到 [0..n] 和 [0..1] 到 [0..n]。而 [0..1] 到 [1..n] 不是一個(gè)實(shí)際已知的用例。

多對(duì)多

多對(duì)多關(guān)系總是需要一個(gè)連接表來進(jìn)行映射。

對(duì)于關(guān)系,多重性在定義中聲明。對(duì)于依賴項(xiàng),多重性僅由代碼間接定義

1)一對(duì)多關(guān)系

一對(duì)多關(guān)系在關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)中很常見,允許以經(jīng)濟(jì)的方式表示復(fù)雜的數(shù)據(jù)集。例如,每個(gè) WarehousePO 實(shí)例都指向?qū)儆谒?StockPO 實(shí)例。同樣,每個(gè)StockPO指向它的WarehousePO.

為了將倉(cāng)庫(kù)和庫(kù)存數(shù)據(jù)關(guān)聯(lián)起來,表中需要一個(gè)特殊的列,為每個(gè)實(shí)例StockPO標(biāo)識(shí)正確的實(shí)例。這個(gè)特殊的列作為外鍵,它通常映射到相關(guān)表的主鍵,在我們的例子中,表。WarehousePOStockPOWarehousePO回到關(guān)系的表示,這意味著您必須引入一個(gè)特殊的屬性,該屬性用作外鍵并映射到相關(guān) PO 類的主鍵屬性上。在一對(duì)多關(guān)系中,外鍵在類中定義多面, 例如, StockPO, 它映射到類的主鍵上一邊,例如,WarehousePO。

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

索引(倉(cāng)庫(kù)ID);
屬性warehouseID: uuid 必填 只讀;
關(guān)系倉(cāng)庫(kù)PO: WarehousePO[ 1. . 1 ] 逆stockItemPOs實(shí)現(xiàn)倉(cāng)庫(kù)
{
  外鍵(倉(cāng)庫(kù)ID) -> (UUID);
}

對(duì)于一對(duì)多關(guān)系,代碼生成器為所涉及的兩個(gè)類創(chuàng)建特殊方法,多面和上的課一邊. 方法因所考慮的類別而異。

多端方法

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

public WarehousePO getWarehousePO ()

單方面的

方法一邊,例如,WarehousePO代碼生成器創(chuàng)建一個(gè)方法來訪問代表類的相關(guān)角色多面,例如StockPO:

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

此外,代碼生成器創(chuàng)建關(guān)系包裝器方法。這些方法檢查特定元素是否參與關(guān)系:

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

2)依賴

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

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

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

另一個(gè)常見的用例是隱藏與單側(cè) PO位于同一墨盒中的 PO 的關(guān)系,因?yàn)樗淮蛩闶乖?PO 的這種關(guān)系“公開”。在這種情況下,不能定義處理程序,并且調(diào)用 PO 的工廠以通過主鍵查找來定位相關(guān)實(shí)例。另一個(gè)用例是避免創(chuàng)建與海量數(shù)據(jù)的雙向關(guān)系。

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

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

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

在我們的示例中,依賴項(xiàng)將自定義 POWarehousePO與標(biāo)準(zhǔn) Intershop 7 CAPI 接口連接起來Address。在對(duì)這樣的依賴項(xiàng)進(jìn)行建模時(shí),您必須提供管理器的符號(hào)名稱,該管理器提供對(duì) CAPI 接口后面對(duì)象的訪問。

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

代碼生成器創(chuàng)建一個(gè) getter 方法,它允許您訪問特定源類實(shí)例所連接到的目標(biāo)類實(shí)例,以及一個(gè)用于將源實(shí)例分配給目標(biāo)實(shí)例的 setter 方法。例如,對(duì)于與 連接的依賴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)多對(duì)多關(guān)系

多對(duì)多關(guān)系在 Intershop 7 應(yīng)用程序中很常見。例如,考慮產(chǎn)品和供應(yīng)商之間的關(guān)系:每個(gè)供應(yīng)商可能交付不止一種產(chǎn)品,而每種產(chǎn)品可能由不止一個(gè)供應(yīng)商交付?;蛘撸M合產(chǎn)品以形成新產(chǎn)品(例如,計(jì)算機(jī)、鼠標(biāo)和監(jiān)視器)的產(chǎn)品捆綁包可以捆綁成完整的計(jì)算機(jī)包。這里也存在多對(duì)多關(guān)系,因?yàn)槊總€(gè)產(chǎn)品包可以包含許多不同的產(chǎn)品,并且每個(gè)產(chǎn)品都可以是不同產(chǎn)品包的一部分。

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

(3)CAPI接口和持久對(duì)象

在許多用例中,持久對(duì)象實(shí)現(xiàn)了 CAPI 接口。該接口也可以建?;蜃鳛橥獠款愋蛯?dǎo)入。以下 EDL 片段中顯示了在自定義 PO 之上建模的一組 CAPI 接口的示例:

導(dǎo)入 “enfinity:/demo/edl/com/intershop/demo/capi/Warehouse.edl”;
命名空間 com.intershop.demo.internal
{
  orm class  WarehousePO  extends  ExtensibleObjectPO  implements  Warehouse  { ... }
}
導(dǎo)入 “enfinity:/demo/edl/com/intershop/demo/capi/Stock.edl”;
命名空間 com.intershop.demo.internal
{
  oca orm class  StockPO 實(shí)現(xiàn) Stock  { ... }
}

PO WarehousePO 實(shí)現(xiàn)了接口Warehouse。

PO StockPO 實(shí)現(xiàn)了 Stock 接口。

接口是 capi 包的一部分,而實(shí)現(xiàn)類是內(nèi)部包的一部分。

請(qǐng)注意,PO 和接口使用不同的基類:

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

接口 Warehouse 擴(kuò)展了接口com.intershop.beehive.core.capi.domain.ExtensibleObject。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产在线观看美女福利精 | 亚洲成人中文字幕 | 日本一区二区三区在线播放 | 69久成人做爰视频 | 国产中文字幕免费观看 | 四虎影院最新入口 | 亚洲不卡在线观看 | 奇米影视888 | 日韩高清欧美精品亚洲 | 最新91在线 | 性一交一乱一欲0 | 亚洲欧美精品一区二区 | 成年女人视频免费观看一 | 麻豆精品一区 | 中文字幕在线免费视频 | 婷婷免费高清视频在线观看 | 丁香综合在线 | 51精品视频在线一区二区 | 四虎影视在线影院在线观看观看 | 久久精品国产99国产 | 日本强不卡在线观看 | 在线精品一区二区三区 | 国产成人精品无缓存在线播放 | 久久99热久久精品动漫 | 爱爱免费观看高清视频在线播放 | 欧美不卡视频在线 | 国产成人爱片免费观看视频 | 特级特黄一级乱仑 | 亚洲欧美另类日韩 | 国产成人综合亚洲亚洲欧美 | 色费女人18毛片a级视频在线 | 久草在线视频在线观看 | 国产精品高清久久久久久久 | 女人l8毛片a一级毛片 | 午夜欧美福利视频 | 日韩中文字幕一区 | 99久久综合九九亚洲 | 欧美日韩亚洲m码色帝国 | 国产欧美另类久久久品 | 88国产精品视频一区二区三区 | 一及毛片|