2011-05-26 69 views

回答

0

我在自己的代碼中處理了腳本生成。基本查詢是通過調用hbm2ddl工具生成的,我的代碼爲它們添加了一些細節(如添加如果不存在創建查詢;添加某些創建索引查詢; ...)

0

是否有你的實體之間沒有聲明的關聯? Hibernate會根據你的域模型的知識生成外鍵和映射表等。

如果您只想爲單個隔離表創建DDL,您可以僅使用該實體來配置會話工廠,並將其指向空數據庫。然後,您可以從日誌中記錄DDL(如上所述,由Hibernate生成),然後在獲得所需內容時刪除該數據庫。

但是,如果有任何關聯,然後休眠將無法做到這一點。

+0

不幸的是,實體並不孤立(那很簡單)。但是引用的類(或更正確的表)已經存在。如果create table語句使用「如果不存在」,但不幸的是它們不會。 – Laures 2011-05-26 15:53:25

+0

這是一張新桌嗎?如果使用update而不是create,它將創建包含所有外鍵和引用的新表。。如果這是唯一的域更改,那麼hibernate將只創建新表,並保留現有的表。 – 2011-05-26 22:12:27

0

我想如果你配置你的persistence.xml文件與這個單一的實體,排除所有其他未列出的實體,然後啓動實體管理器工廠啓用DDL自動生成,你可能會得到這一點。

<persistence 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" version="2.0"> 
    <persistence-unit name="stackoverflow" transaction-type="RESOURCE_LOCAL"> 
     <class>com.stackoverflow.model.SingleEntity</class> 
     <exclude-unlisted-classes>true</exclude-unlisted-classes> 
     <properties> 
      <property name="hibernate.hbm2ddl.auto" value="create"/> 
     </properties> 
    </persistence-unit> 
</persistence> 
相關問題