2009-01-17 133 views
27

我專門找了JPA代碼生成技術JPA的Java代碼生成

首先,什麼是所有的項目可能產生的JPA兼容的代碼? (例如HibernateTools)

其次,我還想定製代碼生成實用程序,因爲它必須符合我們的企業標準。

如果不是,那麼所有可用框架可用於使用反射生成Java代碼?所以我可以從頭開始寫。

注意:我使用eclipse生成JPA代碼並重復重構以使其符合規範。

回答

22

我也有認識問題的困難,但我會嘗試重組:

  • 你有很多的DB數據,並希望通過JPA訪問它
  • 你不想手動編寫的類訪問不同的數據庫/表
  • 目前,所有/大部分的模型類是在Eclipse中產生
  • 這些模型有JPA註解
  • 模型類(或ANNOT )不符合企業標準

當您說「JPA java代碼生成」時,我理解從提供的數據庫連接生成JPA註釋的模型類。大多數框架通常將其稱爲逆向工程。

現在你有兩個問題:

  1. 可以推薦什麼碼產生器產生JPA註解的類?
  2. 是否可以自定義這些框架的輸出,以及以何種方式?

要回答第一個問題:

我真的很喜歡Netbeans代碼生成,特別是如果你將結果展示給不熟悉JPA的人。

在自定義級別,我只能分享我與Hibernate Tools的經驗。尤其對於可重現的結果,請嘗試使用ant-based tasks。您可以輕鬆一些目標添加到您的構建和代碼生成可以在兩個層次進行:

有了模板,你應該能夠覆蓋大部分企業標準。查看hibernate-tools軟件包的pojo目錄。定製代碼生成的最簡單方法是複製和調整模板,並將它們放在用於創建pojos的ant任務中的hibernate-tools.jar之前。

正如另一條評論中已經指出的,之後可能很難修改生成的代碼。我希望以下提示可以幫助您:

  • 嘗試在不同文件夾中分隔生成的和自定義的源文件。
  • 考慮使用@MappedSuperclass作爲您可能需要手動調整的類。
-4

好吧,基本上你有東西錯了方法:JPA is the generation tool

我這樣說是因爲唯一可以生成JPA實體的東西是SQL,而JPA的重點是以相反的方式做事。你首先定義你的對象模型,然後你可以生成你的表和查詢。

例如,我見過項目使用Hibernate來定義他們的實體,然後他們有一個ant build腳本,它可以從Hibernate實體模型創建數據庫。

JPA實體定義 - 特別是與註釋一起完成 - 並不是完全麻煩。作爲第一件事,他們確實是你最好的選擇,而不是成爲別的東西的產物。

此外,另一個工具不會幫助您編寫命名查詢,定義關係中正確的級聯選項等。如果您生成了代碼,那麼您將如何處理修改它?

這只是不正確的路要走。

+0

這個答案downvoted因爲接近從兩邊的問題是可以接受的,各有權衡 – IcedDante 2017-04-03 21:32:08

0

檢出JPM2java,它是JPA的代碼生成器。唯一的問題是它不會從SQL文件或表中生成JPA代碼,您需要一個orm.xml文件。如果你正在尋找一個工具來直接從表生成代碼,你可能想嘗試Netbeans。它有選項可以直接從表生成JPA代碼

1

項目lombok似乎允許您生成基本的命名查詢,這是另一種在編譯時使用註釋和代碼生成的方法。

參見:

在休眠論壇一個傢伙似乎使用與Hibernate工具一traditionnal代碼生成方法: https://forum.hibernate.org/viewtopic.php?f=9&t=962223&p=2315766&hilit=named+queries+generate#p2315766

我與克萊同意關於你不能生成所有命名查詢的問題,但是我想我們可以想象基於對象的一個​​或幾個字段生成基本的命名查詢,例如查找器。

3

我已使用Dali Persistence Eclipse Plugin,該工具可通過Indigo Java EE SR1 update site進行下載。

安裝插件後,要對數據庫進行反向工程,您需要創建一個新的JPA項目,設置數據庫連接,啓動JPA運行時的自動下載(在本例中爲Eclipse鏈接),然後啓動生成過程。

在代碼生成過程中,系統會要求您提供有關表映射和生成的類的詳細信息。在這一代結束時,代碼是乾淨的。

5

爲JPA代碼生成另一種有效的解決方案是 「Telosys工具

一種Eclipse插件從現有的數據庫( 「數據庫firts」 方法)與定製模板工作。該解決方案比大理得益於其輕量化模型和Velocity模板(GitHub上共享)

請訪問網站更加靈活:http://www.telosys.org/

Eclipse的市場插件:http://marketplace.eclipse.org/content/telosys-tools

的簡要說明原理:http://labs.sogeti.com/code-generation-can-it-be-simple-and-pragmatic/

對於JPA代,使用JPA模板可以在GitHub上:https://github.com/telosys-templates-v3

+1

爲Telosys模板的新網址是:https://github.com/telosys-tools/ JPA的軟件包是「persistence-jpa-TTversion」 – lgu 2015-06-16 15:52:16

+0

如果它適用於我,它會試用它..因爲我是JPA的新手。 – 2016-03-15 18:07:41

2

Minuteproject是一個生成器工具,可以生成JPA1/JPA2以及休眠類似ORM的工件。 它基於數據庫的反向工程。 您可以指示生成器爲您的java代碼應用不遵循數據庫約定的約定,但映射將是正確的。 (示例條帶數據庫名稱前綴;以ADMIN_開頭的表(例如ADMIN_ENVIRONMENT)是java類的Environment(w/out Admin)) 目前20+ conventions可幫助您重塑您的模型以減少更多Java的數據庫外觀-OO友好。

另一個有趣的特點是updatable-code從而能夠同時修改生成的代碼和模型 AHT下一代您的修改將被保存!發生器進行合併。

這些模板是開源的並且運行速度很快很容易爲您的框架添加一個特定的軌道(例如與您的組織相關的安全方面)。您可以將模板範圍擴展到字段級別,實體(表或視圖),包(實體組),模型,提供靈活性的應用程序,並且由於軌道的模板通過元數據相互認識,因此從其他角度很容易引用模板並通過配置將它們與命名約定相關聯。

0

jpa代碼反向生成的理想工具/ eclipse插件是Hibernate Tools。這已經成爲JBoss Tools的一部分。所以,在你的eclipse中,首先要安裝JBoss Tools。

然後創建一個JPA項目。該項目將充當您與逆向生成項目相關的所有代碼/配置的持有者。首先安裝JBoss工具爲您提供了您的Hibernate配置(Hibernate工具的一部分)與您的JPA項目一起創建的優勢。

下一步將是使用Hibernate工具來實際反向生成對應於您的數據庫表的JPA POJO實體。

要了解JPA POJO反向代步驟詳細,你可以看看下面的教程... http://www.javabrahman.com/j2ee/how-to-do-reverse-code-generation-of-hibernatejpa-pojo-entities-using-jboss-tools-eclipse-plugin/

上面的教程也有教程的鏈接創建JPA項目,也爲安裝JBoss eclipse安裝中的工具都是JPA POJO實體反向代碼生成的先決條件。