1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

JPA Toplink Derby "Drop and Create Tables" funktioniert nicht!

Dieses Thema im Forum "Enterprise Java (JEE, J2EE, Spring & Co.)" wurde erstellt von Merschi, 8. April 2008.

  1. Merschi

    Merschi Grünschnabel

    Hallo,

    beim deployen werden/wird die Tabelle in der Datenbank nicht automatisch gedropped und created, obwohl ich es als property angegeben habe.

    Meine Persitence.xml sieht folgender massen aus:

    Code (Text):
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <persistence version="1.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_1_0.xsd">
    3.   <persistence-unit name="KeyGenPU" transaction-type="JTA">
    4.     <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    5.     <jta-data-source>jdbc/sample</jta-data-source>
    6.     <properties>
    7.       <property name="toplink.ddl-generation" value="drop-and-create-tables"/>
    8.     </properties>
    9.   </persistence-unit>
    10. </persistence>
    Meine Entity Klasse so:

    Code (Text):
    1. @Entity
    2. @Table(name = "NEWENTITY")
    3. @NamedQueries({@NamedQuery(name = "Newentity.findById", query = "SELECT n FROM Newentity n WHERE n.id = :id"), @NamedQuery(name = "Newentity.findByFirstname", query = "SELECT n FROM Newentity n WHERE n.firstname = :firstname")})
    4. public class Newentity implements Serializable {
    5.     private static final long serialVersionUID = 1L;
    6.     @Id
    7.     @GeneratedValue(strategy=GenerationType.IDENTITY)
    8.     @Column(name = "ID", nullable = false)
    9.     private Long id;
    10.     @Column(name = "FIRSTNAME")
    11.     private String firstname;
    12.  
    13.     public Newentity() {
    14.     }
    15.  
    16.     public Newentity(Long id) {
    17.         this.id = id;
    18.     }
    19.  
    20.     public Long getId() {
    21.         return id;
    22.     }
    23.  
    24.     public void setId(Long id) {
    25.         this.id = id;
    26.     }
    27.  
    28.     public String getFirstname() {
    29.         return firstname;
    30.     }
    31.  
    32.     public void setFirstname(String firstname) {
    33.         this.firstname = firstname;
    34.     }
    35. }
    Ich verwende:

    - Netbeans 6
    - Derby
    - Toplink

    Wäre nett, wenn mir jemand dieses Verhalten erklären könnte.
     
  2. Oliver Gierke

    Oliver Gierke Erfahrenes Mitglied

    1. Tipp: vergiss Toplink. Das ist zwar die Referenzimplementierung, allerdings tut es an vielen Stellen nicht das, was es soll (unerwartetes Kaskadieren, untertützt nicht alle Vererbungstpyen, benötigt einen Weaver um die Entities zu erweitern usw.). Hibernate ist in jeglicher Hinsicht die bessere Wahl (ausser vielleicht bei der Jar größe ;) ).

    Zu deinem Problem: die property in der Konfiguration sorgt erstmal nur dafür, dass das SQl erzeugt wird (deswegen auch ddl-creation). Um das zeug auf die Datenbank zu schießen bedarf es einer weiteren Property "toplink.ddl-generation.output-mode" die auf "both" gesetz sein muss (http://www.oracle.com/technology/pr.../toplink-jpa-extensions.html#Java2DBSchemaGen).

    Gruß
    Ollie
     
  3. Merschi

    Merschi Grünschnabel

    Vielen Dank für die schnelle Antwort. Da ich sowieso noch am Anfang stehe werde ich mir dann wohl Hibernate anschauen, da ich in der Tat auch schon an anderen Stellen bei Toplink auf rätselhaftes Verhalten gestossen bin und nur am recherchieren bin.
     
Die Seite wird geladen...