2009-04-22 42 views
19

Tôi đang chơi xung quanh với một số nội dung JPA, thay đổi ánh xạ để xem cách chúng được cho là vv. Đó là thử nghiệm cơ bản. Tuy nhiên tôi không thể tìm thấy một công cụ đơn giản sẽ đọc các thực thể của tôi và sau đó tạo lược đồ bảng cho tôi. Tôi đã cố gắng để tìm một cái gì đó như thế này trong các công cụ JBoss nhưng nada. Tích hợp Eclipse sẽ là một điểm cộng lớn nhưng tôi sẽ lấy một công cụ dòng lệnh hoặc một tác vụ kiến.Kỹ sư đảo ngược DDL từ các thực thể JPA

Bất kỳ ý tưởng nào?

Trả lời

8

Tôi không nghĩ rằng có một cách phổ biến để làm điều này với JPA, bạn phải trực tiếp sử dụng triển khai JPA cơ bản để đạt được điều này.

Đối Hibernate, có một số khả năng:

  • Sử dụng phương pháp duffymo được đăng trước đó, mà làm cho Hibernate cập nhật database schema tự động.
  • Nếu bạn không muốn điều đó, bạn có thể sử dụng công cụ hbm2ddl từ Hibernate Tools (lưu ý: liên kết hút, nhưng dường như trang chủ của họ bị hỏng một chút ngay bây giờ). Bạn có thể sử dụng nó để tự động tạo các kịch bản tạo cơ sở dữ liệu từ các thực thể JPA của bạn; cũng có các plugin cho Maven và Ant gọi tự động hbm2ddl.

Đối với EclipseLink (trước đây là Oracle TopLink, JPA 2.0 RI) xem Using EclipseLink JPA Extensions for Schema Generation. Về nguyên tắc nó là rất tương tự như Hibernate, mặc dù ở cái nhìn đầu tiên tôi không thấy bất cứ điều gì có thể được sử dụng như là một tiện ích độc lập để tạo ra một kịch bản DB.

Triển khai JPA khác (BEA/Oracle Kodo, Apache OpenJPA) có thể có các phương pháp cụ thể của riêng mình để đạt được điều này.

6

Khi tôi sử dụng Hibernate Tôi chỉ đơn giản là thêm video này vào tập tin cấu hình của tôi:

 <property name="hbm2ddl.auto">update</property> 

Đưa sóc tất cả mọi thứ. Tôi không chắc những gì tương đương với JPA, nhưng nó bị ảnh hưởng rất nhiều bởi Hibernate mà tôi sẽ ngạc nhiên nếu bạn không thể tìm thấy một cái gì đó tương tự.

Không cần công cụ. Tôi thường chỉ chạy một bài kiểm tra JUnit đơn giản và cơ sở dữ liệu được tạo cho tôi.

2

DataNucleus có SchemaTool riêng có khả năng tạo lược đồ cho bạn hoặc tạo các câu lệnh DDL bắt buộc để bạn thích ứng và áp dụng chính mình.

--Andy (DataNucleus)

16

Hãy thử thêm những điều sau vào sự kiên trì của bạn.xml

Đối với Hibernate:

Để tạo:

<property name="hibernate.hbm2ddl.auto" value="update"/> 

Để thả và tạo:

<property name="hibernate.hbm2ddl.auto" value="create-drop"/> 

Đối TopLink:

Để tạo:

<property name="toplink.ddl-generation" value="create-tables"/> 

Để thả và tạo:

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

Đối EclipseLink:

Để tạo:

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

Để thả và tạo:

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

Thêm vào danh sách của James McMahon:

Đối OpenJPA:

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> 
4

tôi sử dụng lớp org.hibernate.tool.hbm2ddl.SchemaExport Hibernate và phương pháp nhỏ này để

tạo ra các lược đồ trong cơ sở dữ liệu:

public static void rebuildSchema() 
{ 
    configuration = new Configuration(); 
    configuration.configure(); 

    new SchemaExport(configuration) 
     .setHaltOnError(true) 
     .execute(false, true, false, false); 
} 

để tạo DDL trong một tệp bên ngoài, hãy sử dụng cuộc gọi này tới execute.

 new SchemaExport(configuration) 
     .setHaltOnError(true) 
     .setOutputFile(outputFile) 
     .setImportFile("") 
     .setDelimiter(";") 
     .setFormat(true) 
     .execute(false, false, false, true); 

Nó được coi là hình thức xấu để đặt "hibernate.hbm2ddl.auto" thành "cập nhật", vì tự động thay đổi cơ sở dữ liệu sản xuất có thể phá vỡ nó. Để được giải thích, hãy xem Hibernate hbm2ddl.auto possible values and what they do?.

4

Bằng Plugin maven:

 <plugin> 
      <!-- run "mvn hibernate3:hbm2ddl" to generate a schema --> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>hibernate3-maven-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
       <hibernatetool> 
        <classpath> 
         <path location="${project.build.directory}/classes" /> 
         <path location="${project.basedir}/src/main/resources/META-INF/" />            
        </classpath> 

        <jpaconfiguration persistenceunit="galleryPersistenceUnit" />      
        <hbm2ddl create="true" export="false" destdir="${project.basedir}/target" drop="true" outputfilename="mysql.sql" format="true" console="true"/> 
       </hibernatetool> 
      </configuration> 
     </plugin> 
0

Antonio Goncalves nói trong blog về mình API để tạo ra các giản đồ.
Trong phương pháp JPA 2.1 generateSchema được giới thiệu cho mục đích này.

Ví dụ từ blog:

Các vấn đề liên quan