Hibernate - Angabe des Schemas

Dieses Thema Hibernate - Angabe des Schemas im Forum "Data Tier" wurde erstellt von y0dA, 14. Nov. 2010.

Thema: Hibernate - Angabe des Schemas Hi! Versuche gerade dass ich mittels Hibernate auf meine Postgres DB zugreife - leider klappt es noch nicht....

  1. Hi!

    Versuche gerade dass ich mittels Hibernate auf meine Postgres DB zugreife - leider klappt es noch nicht.

    1) Habe ich entdeckt dass ich folgenden Eintrag in meiner persistence.xml besitze welcher mir ja jedesmal die Tabellen neu anlegt. Was muss ich machen damit einfach die definierten Tabellen benutzt werden die ich schon per pgAdmin3 erstellt habe? Einfach den folgenden Eintrag aus der persistence.xml löschen bzw. auf validate setzen?
    Code (Java):

    <property name="hibernate.hbm2ddl.auto" value="create" /
     
    2) Werden zur Zeit die Tabellen unter dem Schema "public" angelegt, jedoch möchte ich ein anderes Schema benutzen (in welchen bereits meine per pgAdmin3 angelegten Tabellen "schlummern") - wie kann ich ein Schema bei Hibernate angeben?
    Bei openjpa ging es bspw. so:
    Code (Java):

    <property name="openjpa.jdbc.Schema" value="SCHEMA" />
     
     
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. Zu 1.): Du solltest die Zeile löschen können. Hatte JPA2.0 bisher nur mit Eclipselink, aber ich denke
    Hibernate funktioniert ähnlich.

    Zu 2.): Sorry, k.A.
     
  4. Hatte ich mir schon gedacht, danke dir.

    Zu 2)
    Es kann doch nicht sein dass ich mit Hibernate bei jeder Entity bei der Table Annotation den Schemanamen dazuschreiben muss oder?

    **EDIT**
    Haben nun wie folgt die persistence.xml um "hibernate.default_schema" erweitert:
    Code (Java):

    <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="mybudget" transaction-type="RESOURCE_LOCAL">
            <properties>
                <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
                <property name="hibernate.show_sql" value="false" />
                <property name="hibernate.format_sql" value="false" />
                <property name="hibernate.use_sql_comments" value="false" />
                <property name="hibernate.connection.autocommit" value="false" />
                <property name="hibernate.cache.use_query_cache" value="false" />
                <property name="hibernate.cache.use_second_level_cache"
                    value="false" />
                <!-- <property name="hibernate.hbm2ddl.auto" value="create-drop" /> -->  
                <property name="hibernate.default_schema" value="mybudgetschema"/>
            </properties>

        </persistence-unit>
    </persistence>
     
    Nur um folgende Exception zu bekommen:
    Code (Java):
     
    Irritierende Exception da ich bspw. im pgAdmin3 folgende Statement absetzen kann und die Tabelle gefunden wird:
    Code (Java):

    SELECT "ID", "FIRSTNAME", "LASTNAME"
      FROM mybudgetschema."PERSON";
     
    Warum klappt
    Code (Java):
                <property name="hibernate.default_schema" value="mybudgetschema"/>
    nicht? Bzw. warum wird das Schema nicht erkannt obwohl es tatsächlich existiert?
     
    Zuletzt bearbeitet: 14. Nov. 2010
  5. jdbc:postgresql://localhost:5432/andreak?schema=myschema

    Re: Schema in connection URL

    (Ich selber nutze kein Postgres und hab das jetzt auch nur gegoogled.)
     
  6. Also bei mir muss gefrickelt werden.


    CREATE TABLE "default"."language" (
    "language_id" INT, PRIMARY KEY ("language_id"));

    Mit

    @Entity
    @Table(name= "language")
    @AccessType("property")
    @SuppressWarnings({"unused", "serial"})
    public class Language{
    ...
    }

    Ergab:
    select this_.language_id as language1_3_0_ from default.language_translation
    und den Fehler:
    org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    Caused by: org.postgresql.util.PSQLException: FEHLER: Syntaxfehler bei `default'

    Also wird Benötigt
    c.setProperty(Environment.DEFAULT_SCHEMA, "\"default\"");

    Dann klappts. Kurios!
     
    Zuletzt bearbeitet: 27. Jan. 2015
  7. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!