freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[計(jì)算機(jī)軟件及應(yīng)用]ejb3課件(編輯修改稿)

2024-11-15 04:05 本頁面
 

【文章內(nèi)容簡介】 是否唯一 ? nullable: 是否允許為空 ? length: 對(duì)于字符型列, length屬性指定列的最大字符長度 ? insertable: 是否允許插入 ? updatable: 是否允許更新 ? columnDefinition: 定義建表時(shí)創(chuàng)建此列的 DDL ? secondaryTable: 從表名。如果此列不建在主表上(默認(rèn)建在主表),該屬性定義該列所在從表的名字。 ? @Column(name = PersonName,nullable=false,length=32) @Id ? @Id 注釋指定 personid屬性為表的主鍵,它可以有多種生成方式: ? TABLE:容器指定用底層的數(shù)據(jù)表確保唯一。 ? SEQUENCE:使用數(shù)據(jù)庫的 SEQUENCE 列來保證唯一 ? IDENTITY:使用數(shù)據(jù)庫的 INDENTIT列來保證唯一 ? AUTO:由容器挑選一個(gè)合適的方式來保證唯一 ? NONE:容器不負(fù)責(zé)主鍵的生成,由調(diào)用程序來完成。 ? @GeneratedValue注釋定義了標(biāo)識(shí)字段的生成方式 ,本例 personid的值由 MySQL數(shù)據(jù)庫自動(dòng)生成。 EntityManager ? EntityManager 是由 EJB容器自動(dòng)地管理和配置的,不需要用戶自己創(chuàng)建,他用作操作實(shí)體 Bean。在類中并沒有看到對(duì) EntityManager em進(jìn)行賦值,后面卻可以直接使用他。這是因?yàn)樵趯?shí)體 Bean加載時(shí),容器通過 @PersistenceContext注釋動(dòng)態(tài)注入EntityManager 對(duì)象。 ? 如果 內(nèi)容。你需要指定持久化名稱注入 EntityManager 對(duì)象,可以通過 @PersistenceContext注釋的 unitName屬性進(jìn)行指定,例: ? @PersistenceContext(unitName=foshanshop) ? EntityManager em。 ? 如果只有一個(gè)持久化內(nèi)容配置,不需要明確指定。 托管與非托管實(shí)體 ? 在進(jìn)一步討論 entity manager 服務(wù)之前,我們需要更加深入地理解實(shí)體對(duì)象實(shí)例的生命周期。一個(gè) entity bean 實(shí)例或者受 entity manager 托管(也稱為 attached),或者不受其托管(也稱為 detached)。若 entity bean 與 EntityManager 相關(guān)聯(lián),則 EntityManager 會(huì)跟蹤實(shí)體的狀態(tài)變更,并在 entity manager 決定對(duì)實(shí)體狀態(tài)進(jìn)行 flush 操作的時(shí)候,將這些變更保存到數(shù)據(jù)庫中。 ? 一旦實(shí)體被解除了關(guān)聯(lián),它就不再受托管了。Entity manager 不會(huì)對(duì)任何解除關(guān)聯(lián)的實(shí)體做狀態(tài)變更的跟蹤。 Persistence context ? Persistence context 是由一組受托管的實(shí)體對(duì)象實(shí)例所構(gòu)成的集合。它受 entity manager 的管理。 Entity manager 追蹤 persistence context 中所有對(duì)象的修改和更新情況,并根據(jù)指定的 flush 模式(本章稍后會(huì)做討論)將這些修改保存到數(shù)據(jù)庫中。一旦 persistence context被關(guān)閉,所有實(shí)體對(duì)象實(shí)例都會(huì)脫離 EntityManager而成為非托管對(duì)象。對(duì)象一旦從persistence context 中脫離,就不再受 entity manager 管理了,任何對(duì)此對(duì)象的狀態(tài)變更也將不會(huì)被同步到數(shù)據(jù)庫。 ? 一旦 persistence context被關(guān)閉,所有的實(shí)體對(duì)象實(shí)例都會(huì)脫離 entity manager 而成為非托管對(duì)象。 ? Java Persistence 中有兩種類型的 persistence context,分別是 transactionscoped persistence context 和 extended persistence context。 Transactionscoped persistence context ? 有的 persistence context 可能只在事務(wù)范圍內(nèi)存在,它們會(huì)在事務(wù)結(jié)束后被關(guān)閉,這樣的 persistence context 被稱作 transactionscoped persistence context。當(dāng)事務(wù)結(jié)束時(shí),transaction scoped persistence context 將被銷毀,而所有的托管實(shí)體對(duì)象實(shí)例也將處于游離狀態(tài)( detached)。 ? 只有受應(yīng)用服務(wù)器管理的 persistence context 才可以是事務(wù)范圍的。換言之,只有標(biāo)注了 @PersistenceContext 注解(或是其 XML 的等價(jià)描述)的 EntityManager實(shí)例才可以是事務(wù)范圍的。 Extended persistence context ? 我們也可以將 persistence context配置成超出事務(wù)的范圍,我們稱之為 extended persistence context。與 extended context 相關(guān)聯(lián)的實(shí)體對(duì)象實(shí)例會(huì)一直保持托管狀態(tài),甚至在事務(wù)提交之后也是如此。在某些場合下,這一特性極為有用。 ? 例如,你想保持與數(shù)據(jù)庫的會(huì)話,又不希望使用長事務(wù)( longrunning transaction),因?yàn)殚L事務(wù)會(huì)一直占用像 JDBC 連接、數(shù)據(jù)庫鎖這樣的寶貴系統(tǒng)資源。 Extended persistence context 可以由應(yīng)用代碼自行創(chuàng)建和管理。 游離實(shí)體( Detached entities) ? 當(dāng) transaction scope persistence context 或 extended persistence context 結(jié)束之后,實(shí)體的實(shí)例就會(huì)不受托管而處于游離狀態(tài)。游離實(shí)體的一個(gè)值得注意的特征是,它可以被序列化并通過網(wǎng)絡(luò)發(fā)送給遠(yuǎn)程客戶端??蛻舳丝梢孕薷倪@些經(jīng)過序列化的對(duì)象實(shí)例,并將它們發(fā)送回服務(wù)器,服務(wù)器再將客戶端的修改重新合并到數(shù)據(jù)庫中。 ? 這與 EJB 的實(shí)體模型有很大的不同。在 EJB 中,實(shí)體是始終受容器管理的,使用 entity bean 的應(yīng)用程序總要帶一個(gè)指向 entity bean 的代理(譯注: proxy,即遠(yuǎn)程接口或本地接口);而在 EJB 中,你是直接與普通 Java 類的具體實(shí)例打交道的。 獲取 EntityManager ? 我們可以通過 EntityManagerFactory 來創(chuàng)建和獲得 EntityManager。在 Java SE 環(huán)境中,你必須使用 EntityManagerFactory 來創(chuàng)建 EntityManager 的實(shí)例,在 Java EE 中則還有其他選擇。 package 。 public interface EntityManagerFactory { EntityManager createEntityManager()。 EntityManager createEntityManager( map)。 void close()。 boolean isOpen()。 } ? 與 Java SE 相比,在 Java EE 中獲取 EntityManagerFactory 要更為容易一些。通過使用@ 注解, EJB 容器會(huì)將 EntityManagerFactory 的實(shí)例直接注入或通過 setter 方法注入到 EJB 的數(shù)據(jù)成員中。 EntityManager ? persist()方法 ? (cust)。 ? find()和 getReference()方法 public interface EntityManager { T T find(ClassT entityClass, Object primaryKey)。 T T getReference(ClassT entityClass, Object primaryKey)。 } ? getReference()方法與 find()方法的不同之處在于:如果在數(shù)據(jù)庫中找不到相應(yīng)的實(shí)體, getReference()方法將拋出 ;并且該方法并不保證返回實(shí)例的內(nèi)部狀態(tài)會(huì)被初始化。 ? persistence context 的不同而有所不同:若 EntityManager 是 transactionscoped persistence context,則會(huì)返回游離對(duì)象;而若是 extended persistence context,則返回托管對(duì)象。 Entity Manager ? 查詢 ? Query createQuery(String queryString)。 ? Query createNamedQuery(String name)。 ? Query createNativeQuery(String sqlString)。 ? Query createNativeQuery(String sqlString, Class resultClass)。 ? Query createNativeQuery(String sqlString, String resultSetMapping)。 ? 更新 ? 一旦你調(diào)用了 find(), getReference(),或創(chuàng)建并執(zhí)行了一次查詢,所得的 entity bean實(shí)例在 persistence context 關(guān)閉前仍將處于托管狀態(tài)。在此期間,你可以像其他對(duì)象那樣隨便更改 entity bean 實(shí)例的狀態(tài),任何更改都將被自動(dòng)(取決于 flush 模式)或手工(通過調(diào)用 flush()方法)地同步到數(shù)據(jù)庫中。 ? 合并實(shí)體 ? 在 Java Persistence 中,你可以使用 EntityManager 的 merge()方法,將游離實(shí)體的狀態(tài)變更合并到數(shù)據(jù)庫中。 Entity Manager ? 刪除實(shí)體 ? 調(diào)用 ()可以將實(shí)體從數(shù)據(jù)庫中刪除。不過, remove()方法并不立即生效,而是在 EntityManager 決定執(zhí)行 flush 操作時(shí),根據(jù)定義好的 flush 規(guī)則才會(huì)執(zhí)行 SQL DELETE 操作。 ? refresh() ? 如果發(fā)現(xiàn)當(dāng)前受托管的實(shí)體并非數(shù)據(jù)庫中的最新數(shù)據(jù),你可以調(diào)用 EntityManager. refresh()方法。 refresh()方法會(huì)根據(jù)數(shù)據(jù)庫的情況刷新內(nèi)存中實(shí)體的狀態(tài),同時(shí)覆蓋對(duì)實(shí)體所做的任何修改。 ? contains()方法與 clear()方法 ? contains()方法接受實(shí)體實(shí)例作為參數(shù),如果該對(duì)象實(shí)例目前正受 persistence context 管理,則返回 true。若該參數(shù)并非實(shí)體類型,則會(huì)拋出 IllegalArgumentException 異常。你可以使用 ()方法將 persistence context 中所有的托管實(shí)體都變成游離對(duì)象。需要注意的是,一旦你調(diào)用了 clear()方法,對(duì)實(shí)體所做的任何修改都將被丟棄。因此,使用 clear()時(shí)需要格外小心。在調(diào)用 clear()之前,先調(diào)用 flush()方法以免丟失更改實(shí)為明智之舉。 flush()方法和 FlushModeType ? 調(diào)用 persist(), merge(), remove()方法之后,這些更改操作只有在 EntityManager 決定執(zhí)行 flush 操作時(shí)才會(huì)被同步到數(shù)據(jù)庫中。你也可以在任何時(shí)候通過調(diào)用 flush()方法做強(qiáng)行同步。缺省情況下, flush操作會(huì)在相關(guān)查詢執(zhí)行之前和事務(wù)提交之時(shí)自動(dòng)執(zhí)行(一些低效的 Java Persistence 實(shí)現(xiàn)甚至可能會(huì)在任何查詢執(zhí)行之前都做 flush操作)。但需注意的是,與一般查詢不同,調(diào)用 find()和 getReference()方法并不會(huì)引起 flush。這是因?yàn)橥ㄟ^主鍵來查詢實(shí)體是不會(huì)受任何更新操作的影響的。 ? 可以通過枚舉類型 來控制和修改這一默認(rèn)行為。 public enum FlushModeType { AUTO, COMMIT } ? AUTO 是前述的默認(rèn)行為。 COMMIT 則表示,僅當(dāng)事務(wù)提交時(shí)才對(duì)更改做 flush 操作,而在任何查詢執(zhí)行之前都不會(huì)引發(fā) flush操作。你可以通過調(diào)用 setFlushMode()方法來指定 EntityManager 的 FlushModeType。 getDelegate() ? getDelegate() 方法允許你獲 得一個(gè)指向底層 persistence provider對(duì)象引用 , 該persistence provider 實(shí)現(xiàn)了 EntityManager 接口。大多數(shù)廠商都提供了針對(duì) EntityManager接口的 API 擴(kuò)展,為了使用這些擴(kuò)展功能,你可以將獲取到的 delegate 對(duì)象強(qiáng)制類型轉(zhuǎn)換為廠商的私有接口。雖然從理論上講,你應(yīng)該可
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1