2010-01-12 18 views
23

我最近一直在簡要介紹JPA,並且想知道與數據庫模式遷移有什麼關係,並且與您創建的類保持一致。支持使用JPA進行模式遷移?

JPA支持這個東西嗎?公用事業?最佳實踐?

乾杯!

+1

我最近閱讀了關於JPA的書。 JPA 2.1於2013年發佈,它現在是否支持遷移? – AechoLiu 2014-12-11 03:14:53

回答

0

如果您將generateDdl設置爲Hibernate(如果它是底層實現),那麼它會根據您當前的方言生成數據庫模式。所以在改變方言後它會自動生成數據庫。

其他JPA提供程序可能具有不同的屬性。

+1

這是正確的,但它沒有解決模式遷移的問題。 – HDave 2010-07-09 02:22:20

+0

@HDave - 相反。模式被複制到新的數據庫,反映當前的數據模型。 – Bozho 2010-07-09 05:18:07

+4

通過模式遷移,我相信OP意味着有一些腳本可以將現有的數據庫與數據結合起來,並將其與新的實體/模式進行更新。通常這需要仔細研究模式更改以及某些時候卸載/重新加載數據,以便FK可以更改,PK可以拆分等.Hibernate可以生成腳本來創建新模式。 Hibernate也可以生成一個腳本來修改一箇舊的模式,使其成爲一個新的模式,但它假定數據庫沒有數據 - 儘管如此,我的理解是,由於「問題」,很少使用該功能。 – HDave 2010-07-09 15:02:53

6

簡短的回答是沒有

如果你改變你的bean,那麼你將不得不手動遷移現有的模式。所以對於Rails風格的數據庫遷移,你將不得不在別處尋找。

然而,您可以輕鬆地從Java bean生成初始的ddl。下面的例子演示模式創建與EclipseLink的2.0版:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="JPATestPU" transaction-type="RESOURCE_LOCAL"> 
     <provider> 
      org.eclipse.persistence.jpa.PersistenceProvider 
     </provider> 
     <class>org.randompage.MyEntity</class> 
     <properties> 
      <property name="javax.persistence.jdbc.user" value="johndoe"/> 
      <property name="javax.persistence.jdbc.password" value="secret"/> 
      <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:h2:~/.h2/testdb;FILE_LOCK=NO"/> 
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
      <property name="eclipselink.logging.level" value="INFO"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

的關鍵因素這裏是

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 

這告訴的EclipseLink放棄現有的表,並從JPA映射產生新的一次。這個過程是高度特定於供應商的,所以對於其他JPA供應商(Hibernate,OpenJPA ...),您將不得不諮詢他們的特定文檔。

11

我不會依賴JPA提供程序來更新數據庫模式。 檢查Liquibase爲好方法之一。

相關問題