日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

扩展您的JPA POJO

發布時間:2023/12/3 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 扩展您的JPA POJO 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
可擴展性是許多體系結構的重要特征。 它衡量是否容易(或困難)
它是在不影響現有核心系統功能的情況下添加或更改功能。

讓我們舉一個簡單的例子。 假設您的公司擁有一個核心產品來跟蹤體育俱樂部中的所有用戶。 在您的產品體系結構中,您有一個由JPA POJO表示的域模型。 域模型包含許多POJO,當然包括用戶POJO。

package com.alex.staveley.persistence /*** User entity. Represents Users in the Sports Club. * * Note: The SQL to generate a table for this in MySQL is:** CREATE TABLE USER (ID INT NOT NULL auto_increment, NAME varchar(255) NOT NULL, * PRIMARY KEY (ID)) ENGINE=InnoDB;*/ @Entity public class User {/* Surrogate Key - automatically generated by DB. */ @GeneratedValue(strategy=GenerationType.IDENTITY) @Idprivate int id;private String name;public int getId() {return id;}public void setName(String name) {this.name=name;}public String getName() {return name;} }

現在,一些客戶喜歡您的產品,但是他們需要在購買之前進行一些定制。 例如,
一位客戶希望將屬性出生地添加到用戶,并希望此屬性持續存在。 當然,此屬性的邏輯位置是在用戶POJO中,但是沒有其他客戶想要此屬性。 所以你會怎么做?

您是否僅為此客戶創建了特定的User類,然后才為他們交換了該類? 怎么了
當您更改產品用戶類別時呢? 如果另一個客戶想要另一個定制怎么辦? 還是改變主意? 您是否感覺事情會變得混亂?

幸運的是,JPA的一種實現:Eclipselink在這里提供了幫助。 2.3版本 (自2011年6月開始提供,最新版本是2011年12月9日最近發布的2.3.2維護)包括一些非常好的功能,可以解決這種情況。 讓我們詳細說明。 通過將@VirtualAccessmethods Eclipselink注釋簡單地添加到POJO,我們向Eclipselink發出信號,表明POJO可能具有一些額外的( 也稱為虛擬 )屬性。 您不必在代碼中指定任何這些額外的屬性, 否則它們將不是非常虛擬的 ! 您只需要指定一個通用的getter和setter來滿足他們的獲取和設置。 您還必須在某個地方將它們存儲在內存中,就像一個很好的舊哈希圖-當然這應該是暫時的,因為我們不持久保存哈希圖本身。 注意:它們不必存儲在HashMap中,這只是一個流行的選擇!

讓我們看一下我們現在可以擴展的用戶。

@Entity @VirtualAccessMethods public class User {/* Surrogate Key - automatically generated by DB. */@GeneratedValue(strategy=GenerationType.IDENTITY) @Idprivate int id;private String name;@Transientprivate Map<String, Object> extensions = new HashMap();public int getId() {return id;}public void setName(String name) {this.name=name;}public String getName() {return name;}public <t> T get(String name) {return (T) extensions.get(name);}public Object set(String name, Object value) {return extensions.put(name, value);} }

那是嗎? 好吧,還有更多的魔術。 您必須告訴eclipselink您的其他屬性。 更具體地說:它們的名稱和數據類型是什么。
您可以通過更新eclipselink-orm.xml來做到這一點,該文件位于persistent.xml所在的同一META-INF文件夾中。

<?xml version="1.0" encoding="UTF-8"?> <entity-mappings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_1.xsd"version="2.1"><entity class="com.alex.staveley.persistence.User"><attributes><basic name="thebirthplace" attribute-type="String" access="VIRTUAL"><column name="birthplace"/><access-methods get-method="get" set-method="set"/></basic></attributes></entity> </entity-mappings>

現在,此配置簡單說明,用戶實體具有一個附加屬性,在Java中,該屬性是“ thebirthplace”,并且是虛擬的。 這意味著它不是在POJO中明確定義的,但是如果我們要調試東西,我們會在內存中看到該屬性的名稱為“出生地”。

此配置還指出該屬性的相應數據庫列是出生地。
eclipselink可以使用通用的get / set方法來獲取和設置此方法。

你想測試嗎?

將列添加到數據庫表中。 在MySql中,這將是:

alter table用戶添加列的出生地varchar(64)

然后運行以下簡單測試:

@Test public void testCreateUser() {User user = new User();user.setName("User1Name");user.set("thebirthplace", "donabate");entitymanager.getTransaction().begin();entitymanager.persist(user);entitymanager.getTransaction().commit();entitymanager.close(); }

因此,現在,我們可以在產品代碼中添加一個可擴展的用戶POJO。 每個客戶都可以根據需要將自己的屬性添加到用戶。 當然,每個客戶都與
僅通過確保每個客戶的擴展都駐留在特定的eclipslink-orm.xml中,即可非常輕松地實現所有其他客戶。 請記住,您可以根據需要隨意命名這些文件,如果不使用默認名稱,則只需更新persistence.xml文件以聲明正在使用的名稱 。

這種方法意味著,當我們想要更新產品中的User時,我們只需要更新一個,并且僅更新User POJO( 因為我們確保只有一個 )。 但是,當必須為特定客戶添加特定屬性時,我們無需觸摸用戶POJO代碼。 我們簡單地對XML進行更改,而不必重新編譯核心產品中的任何內容。 當然,在任何時候,只要查看適當的eclipselink-orm.file,就可以輕松了解針對任何客戶的定制。

是的 快樂擴展!

參考文獻:

  • 在都柏林的技術博客上,從我們的JCG合作伙伴 Alex Staveley 擴展您的JPA POJO
  • http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Extensible_Entities
  • http://www.eclipse.org/eclipselink/
  • 相關文章 :

    • Spring Data JPA的持久層
    • 具有GlassFish和一致性的高性能JPA –第1部分
    • 避免延遲的JPA集合
    • JBoss 4.2.x Spring 3 JPA Hibernate教程
    • Java Persistence API:快速入門

    翻譯自: https://www.javacodegeeks.com/2012/01/extending-your-jpa-pojos.html

    總結

    以上是生活随笔為你收集整理的扩展您的JPA POJO的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。