Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Hibernate und DAO und Reports (https://www.delphipraxis.net/184984-hibernate-und-dao-und-reports.html)

BörmtDieBuse 6. Mai 2015 07:13

Datenbank: Oracle • Version: 11g Release 2 • Zugriff über: Oracle SQL Developer oder Hibernate

Hibernate und DAO und Reports
 
Hallo miteinander,

ich hab lange nix mehr geschrieben aber jetzt hätte ich gleich 2 Fragen.

ich würde gerne ein Reports mit meiner Datenbank erstellen. Zurzeit bräuchte ich drei unterschiedliche Reports.
Ich benutze den Oracle SQL Developer. Mein Programm ist in Java. Meine Datenbank ist eine Standalone Datenbank ohne Webanbindung, GUI also in Java programmiert.
Ich würde die Reports gerne in einer Word Datei verwirklichen, da der Benutzer noch Informationen dazuschreiben muss, welche ich nicht in der DB habe und es auch keinen Sinn macht die zu speichern.

Mein Gedanke ist also folgender:

Benutzer klickt auf "Report erstellen"
Worddatei erscheint mit ausgefüllten Feldern (Daten aus der der DB)
Benutzer schreibt ganz normal in die Worddatei seine Kommentare dazu
Benutzer speichert die Word datei ganz normal ab
Hat jemand Erfahrung mit sowas oder kann mir eine Bibliothek empfehlen?



Ich hätte noch eine andere Frage, ich versuche gerade eine Persistenzschicht aufzubauen die dann mit der Datenbank kommuniziert.
Ich wollte erstmal meine DAO Klassen erstellen und das ganze dann mit Hibernate verknüpfen.

Ich bin aber grad ein wenig verwirrt, da ich ab und zu entweder nur DAO lese oder nur etwas von Hibernate.
Ist die kombination gar nicht möglich? Leider habe ich der Sache keine Erfahrung ich mache das ganze zum ersten Mal.
Vielen Dank im voraus!

Gruß
Börmt-die-Buse

mjustin 6. Mai 2015 08:30

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von BörmtDieBuse (Beitrag 1300382)
Ich wollte erstmal meine DAO Klassen erstellen und das ganze dann mit Hibernate verknüpfen.

Ich bin aber grad ein wenig verwirrt, da ich ab und zu entweder nur DAO lese oder nur etwas von Hibernate.

Hibernate ist eine konkrete Implementierung der Java Persistence API (JPA). Meistens kommt man schneller ans Ziel wenn nicht das konkrete Framework sondern die API verwendet wird, da man hierzu viele Tutorials findet die auf unterschiedlichen Servern mit der jeweiligen JPA Implementierung funktionieren. Wenn man eine bestimmte Umgebung wie Websphere, GlassFish oder JBoss voraussetzt, hat man zwar oft einen Vorteil wenn die eingesetzte IDE optimal mit dieser Umgebung und deren JPA Implementierung arbeitet, aber generell arbeitet JPA überall gleich.

Die DAO Klassen erzeugen dann einfach einen JPA EntityManager, und führen die Abfragen und Aktionen über dessen JPA API Methoden aus. Hibernate oder EclipseLink arbeiten im Hintergrund.

BörmtDieBuse 6. Mai 2015 09:23

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von mjustin (Beitrag 1300391)
Zitat:

Zitat von BörmtDieBuse (Beitrag 1300382)
Ich wollte erstmal meine DAO Klassen erstellen und das ganze dann mit Hibernate verknüpfen.

Ich bin aber grad ein wenig verwirrt, da ich ab und zu entweder nur DAO lese oder nur etwas von Hibernate.

Hibernate ist eine konkrete Implementierung der Java Persistence API (JPA). Meistens kommt man schneller ans Ziel wenn nicht das konkrete Framework sondern die API verwendet wird, da man hierzu viele Tutorials findet die auf unterschiedlichen Servern mit der jeweiligen JPA Implementierung funktionieren. Wenn man eine bestimmte Umgebung wie Websphere, GlassFish oder JBoss voraussetzt, hat man zwar oft einen Vorteil wenn die eingesetzte IDE optimal mit dieser Umgebung und deren JPA Implementierung arbeitet, aber generell arbeitet JPA überall gleich.

Die DAO Klassen erzeugen dann einfach einen JPA EntityManager, und führen die Abfragen und Aktionen über dessen JPA API Methoden aus. Hibernate oder EclipseLink arbeiten im Hintergrund.

Also willst du mir damit sagen, das ich nicht Hibernate benutzen soll? Ich habe mich jedoch schon etwas mit Hibernate beschäftigt und die Klassen dazu angefertigt.
Wenn ich auf die schnelle nach JPA Tutorials such, sieht das eher mau aus.

Ich hab grad ein paar Probleme die Konfigurationsdatei "hibernate.cfg.xml" gescheidt einzurichten bzw. er meckert beim erstellen der SessionFactory rum.

mjustin 6. Mai 2015 11:08

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von BörmtDieBuse (Beitrag 1300401)
Ich hab grad ein paar Probleme die Konfigurationsdatei "hibernate.cfg.xml" gescheidt einzurichten bzw. er meckert beim erstellen der SessionFactory rum.

Eventuell hilft Stackoverflow weiter, es gibt > 3000 Treffer zum Thema hibernate.cfg.xml: http://stackoverflow.com/search?q=hibernate.cfg.xml

Wenn man Hibernate-spezifische Features nutzen will und die Anwendung nicht auf andere Persistenzframeworks portabel sein muss, dann spielt JPA natürlich keine Rolle.

BörmtDieBuse 7. Mai 2015 07:24

AW: Hibernate und DAO und Reports
 
Ich hab bei Stackoverflow nach meinem Problem gesucht und auch etwas gefunden aber leider hab ich jetzt ein anderes Problem
wo ich keine Lösung finde. Aus Sicherheitsgründen habe ich die "hibernate.connection.url" allgemein gehaten

Besonders das verwundet mich, "INFO: HHH000206: hibernate.properties not found"
versteh ich nicht warum er sie nicht finden sollte. Mein classpath hab ich nicht verändert und mein hibernate.cfg.xml file liegt in "src"

Ich hoffe einer kann mir weierhelfen, versuch das ganze schon seit gestern vormittag zu lösen.
Vielen Dank!

Code:
package hibernate;
 import java.util.Date;

 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.hibernate.cfg.Configuration;

 import persistencelayer.*;

 public class HibernateTest {

 public static void main(String[] args) {

    TestUserDetails user2 = new TestUserDetails();
    user2.setUserId(1);
    user2.setUserName("First User");
    user2.setAddress("First User's address");
    user2.setJoinedDate(new Date());
    user2.setDescription("Description of the user goes here");

    try {
    //SessionFactory wird erzeugt, mit der Konfiguration von Hibernate
    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
    Session session = sessionFactory.openSession();
    session.beginTransaction();

 //     session.save(user);

    session.save(user2);
    session.getTransaction().commit();
    } catch (Exception e) {
        System.out.println("Fehler beim erstellen der SessionFactory");
    }



}

}

Hibernate.cfg.xml Konfiguration
Code:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>
    <!-- Database connection settings -->
    <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="hibernate.connection.url">jdbc:oracle:thin:@host:port:ssid:</property>
    <property name="hibernate.connection.username">name</property>
    <property name="hibernate.connection.password">password</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="hibernate.connection.pool_size">1</property>

    <!-- SQL dialect -->
    <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>

    <!-- Disable the second-level cache -->
    <property name="hibernate.cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="hibernate.show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hibernate.hbm2ddl.auto">create</property>

    <!-- Names the annotated entity class -->
    <mapping class="persistencelayer.Project"/>
    <mapping class="persistencelayer.User"/>
    <!-- <mapping class="persistencelayer.Employer"/>
    <mapping class="persistencelayer.IndividualTest"/>
    <mapping class="persistencelayer.ObjectType"/>
    <mapping class="persistencelayer.TestChamber"/>
    <mapping class="persistencelayer.TestMethod"/>
    <mapping class="persistencelayer.TestUserDetails"/> -->


</session-factory>
Fehlermeldungen
Code:
Mai 07, 2015 7:50:32 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
Mai 07, 2015 7:50:32 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.9.Final}
Mai 07, 2015 7:50:32 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Mai 07, 2015 7:50:33 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Mai 07, 2015 7:50:33 AM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
Mai 07, 2015 7:50:33 AM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
Mai 07, 2015 7:50:33 AM org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
Mai 07, 2015 7:50:33 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Mai 07, 2015 7:50:33 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000401: using driver [oracle.jdbc.driver.OracleDriver] at URL [jdbc:oracle:thin:@host:port:ssid:]
Mai 07, 2015 7:50:33 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000046: Connection properties: {user=qqrhldb, password=****}
Mai 07, 2015 7:50:33 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000006: Autocommit mode: false
Mai 07, 2015 7:50:33 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 1 (min=1)
Fehler beim erstellen der SessionFactory

mjustin 7. Mai 2015 09:30

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von BörmtDieBuse (Beitrag 1300582)
I
Besonders das verwundet mich, "INFO: HHH000206: hibernate.properties not found"
versteh ich nicht warum er sie nicht finden sollte.

Ist die hibernate.properties auch im erzeugten Java Programm vorhanden? Vielleicht hat die IDE diese Datei nicht mit in das Ausgabeverzeichnis / Jar kopiert.

p.s. ich konnte ein Hibernate 4 Projekt mit NetBeans aufbauen und darin ist keine hibernate.properties enthalten. Ich binde im Maven POM nur eine Dependency ein:

Code:
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.9.Final</version>
        </dependency>
Ich sehe im Log auch

INFO: HHH000206: hibernate.properties not found

Aber das Programm läuft.

BörmtDieBuse 7. Mai 2015 11:28

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von mjustin (Beitrag 1300604)
Zitat:

Zitat von BörmtDieBuse (Beitrag 1300582)
I
Besonders das verwundet mich, "INFO: HHH000206: hibernate.properties not found"
versteh ich nicht warum er sie nicht finden sollte.

Ist die hibernate.properties auch im erzeugten Java Programm vorhanden? Vielleicht hat die IDE diese Datei nicht mit in das Ausgabeverzeichnis / Jar kopiert.

p.s. ich konnte ein Hibernate 4 Projekt mit NetBeans aufbauen und darin ist keine hibernate.properties enthalten. Ich binde im Maven POM nur eine Dependency ein:

Code:
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.9.Final</version>
        </dependency>

Ich hab einfach mal alle jar dateien mit eingebunden die in der offizielen hibernate 4.3.9zip datei dabei sind.
Es kommen trotzdem die selben Fehlermeldungen.

mjustin 7. Mai 2015 12:14

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von BörmtDieBuse (Beitrag 1300618)
Ich hab einfach mal alle jar dateien mit eingebunden die in der offizielen hibernate 4.3.9zip datei dabei sind.
Es kommen trotzdem die selben Fehlermeldungen.

Ich vermute dass der JDBC Treiber für Oracle etwas an den Connection-Parametern nicht erkennt/unterstützt oder vermisst.

Das ist etwas ungünstig für die Fehlersuche:

Code:
} catch (Exception e) {
        System.out.println("Fehler beim erstellen der SessionFactory");
    }
Da sollte auch der Stacktrace ausgegegeben werden.

Code:
e.printStackTrace();
p.s. am Ende habe ich noch ein sessionFactory.close() eingefügt, damit Programm terminiert.

BörmtDieBuse 7. Mai 2015 12:35

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von mjustin (Beitrag 1300621)

Code:
} catch (Exception e) {
        System.out.println("Fehler beim erstellen der SessionFactory");
    }
Da sollte auch der Stacktrace ausgegegeben werden.

Code:
e.printStackTrace();

Du hast vollkommen recht, das kommt für printStackTrace raus.
Code:
org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect
   at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:132)
   at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.java:118)
   at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:140)
   at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:58)
   at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:75)
   at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106)
   at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
   at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
   at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
   at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260)
   at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94)
   at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
   at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
   at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
   at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
   at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
   at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
   at hibernate.HibernateTest.main(HibernateTest.java:23)
Caused by: java.sql.SQLRecoverableException: I/O-Fehler: Invalid connection string format, a valid format is: "host:port:sid"
   at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:489)
   at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
   at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
   at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
   at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
   at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:55)
   ... 14 more
Caused by: oracle.net.ns.NetException: Invalid connection string format, a valid format is: "host:port:sid"
   at oracle.net.resolver.AddrResolution.resolveSimple(AddrResolution.java:504)
   at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:437)
   at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:693)
   at oracle.net.ns.NSProtocol.connect(NSProtocol.java:251)
   at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1140)
   at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:340)
   ... 19 more
ich hab nochmal mein "host:port:sid" überprüft, hab exakt das rauskopiert, was auch im Oracle SQL Developer drin steht.
kann es vllt sein das er nicht erkennt, welche DB er ansprechen soll? ich hab 2 drin, einmal namens "Test" und einmal "Umweltlabor".

mjustin 7. Mai 2015 12:43

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von BörmtDieBuse (Beitrag 1300624)
ich hab nochmal mein "host:port:sid" überprüft, hab exakt das rauskopiert, was auch im Oracle SQL Developer drin steht.
kann es vllt sein das er nicht erkennt, welche DB er ansprechen soll? ich hab 2 drin, einmal namens "Test" und einmal "Umweltlabor".

Im hibernate.cfg.xml steht (siehe oben) "jdbc:oracle:thin:@host:port:ssid:" als URL und da ist am Ende ein Doppelpunkt, der dort nicht sein sollte.

BörmtDieBuse 11. Mai 2015 14:20

AW: Hibernate und DAO und Reports
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von mjustin (Beitrag 1300625)
Zitat:

Zitat von BörmtDieBuse (Beitrag 1300624)
ich hab nochmal mein "host:port:sid" überprüft, hab exakt das rauskopiert, was auch im Oracle SQL Developer drin steht.
kann es vllt sein das er nicht erkennt, welche DB er ansprechen soll? ich hab 2 drin, einmal namens "Test" und einmal "Umweltlabor".

Im hibernate.cfg.xml steht (siehe oben) "jdbc:oracle:thin:@host:port:ssid:" als URL und da ist am Ende ein Doppelpunkt, der dort nicht sein sollte.

Vielen Dank, du hast recht, das hab ich komplett übersehen.

Ich hab wieder eine neue Frage zu Hibernate.
Im Anhang kann man sehen, das ich 2 Datenbanken in einer hibernate url hab

Code:
<property name="hibernate.connection.url">jdbc:oracle:thin:@host:1631:sid</property>
Weiß jemand, wie ich nur Umweltlabor ansprechen kann und nicht Test? Zurzeit wird alles nur in Test reingeschrieben
Ich hab erst gedacht ich kann es so machen

Code:
<property name="hibernate.connection.url">jdbc:oracle:thin:@host:1631:sid:Umweltlabor</property>
Das passt aber nicht zur Syntax.

Im Internet stand das es so gehen müsste.
Code:
<!--<property name=”hibernate.default_schema”>Umweltlabor</property> -->
Funzt leider auch nicht.

Egal wo ich such wird der Fall von 2 DBs in einer URL nicht beschrieben.
Weiß jemand Rat?
Danke!

mjustin 11. Mai 2015 14:45

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von BörmtDieBuse (Beitrag 1301040)
Im Internet stand das es so gehen müsste.
Code:
<!--<property name="hibernate.default_schema">Umweltlabor</property> -->
Funzt leider auch nicht.

Wenn, dann nur ohne die Kommentarzeichen, also:

Code:
<property name="hibernate.default_schema">Umweltlabor</property>
Das sollte funktionieren, zum Beispiel wird es so beschrieben unter https://karussell.wordpress.com/2009...oracle-and-h2/

BörmtDieBuse 12. Mai 2015 08:33

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von mjustin (Beitrag 1301047)
Zitat:

Zitat von BörmtDieBuse (Beitrag 1301040)
Im Internet stand das es so gehen müsste.
Code:
<!--<property name="hibernate.default_schema">Umweltlabor</property> -->
Funzt leider auch nicht.

Wenn, dann nur ohne die Kommentarzeichen, also:

Code:
<property name="hibernate.default_schema">Umweltlabor</property>
Das sollte funktionieren, zum Beispiel wird es so beschrieben unter https://karussell.wordpress.com/2009...oracle-and-h2/

Von dieser Seite habe ich die Information.
Ich hab es natürlich ohne die Kommentarzeichen gemacht, hab es nur aus dem Code nehmen wollen, da es nicht funktioniert.
Wenn ich aber Hibernate ausführe mit dem Code von oben, dann bekomm ich diese Fehlermeldungen.

Zitat:

INFO: HHH000412: Hibernate Core {4.3.9.Final}
Mai 12, 2015 9:29:52 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000205: Loaded properties from resource hibernate.properties: {hibernate.connection.driver_class=org.h2.Driver, hibernate.service.allow_crawling=false, hibernate.dialect=org.hibernate.dialect.H2Dialect, hibernate.max_fetch_depth=5, hibernate.format_sql=true, hibernate.generate_statistics=true, hibernate.connection.username=sa, hibernate.connection.url=jdbc:h2:mem:db1;DB_CLOSE_ DELAY=-1;MVCC=TRUE, hibernate.bytecode.use_reflection_optimizer=false, hibernate.jdbc.batch_versioned_data=true, hibernate.connection.pool_size=5}
Mai 12, 2015 9:29:52 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Mai 12, 2015 9:29:52 AM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
Mai 12, 2015 9:29:52 AM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
Fehler beim erstellen der SessionFactory
org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml
at org.hibernate.cfg.Configuration.doConfigure(Config uration.java:2165)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:2077)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:2056)
at hibernate.HibernateTest.main(HibernateTest.java:23 )
Caused by: org.dom4j.DocumentException: Error on line 16 of document : Öffnendes Anführungszeichen wird für Attribut "{1}" erwartet, das mit Elementtyp "name" verknüpft ist. Nested exception: Öffnendes Anführungszeichen wird für Attribut "{1}" erwartet, das mit Elementtyp "name" verknüpft ist.
at org.dom4j.io.SAXReader.read(SAXReader.java:482)
at org.hibernate.cfg.Configuration.doConfigure(Config uration.java:2157)
... 3 more

mjustin 12. Mai 2015 08:41

AW: Hibernate und DAO und Reports
 
Zitat:

Caused by: org.dom4j.DocumentException: Error on line 16 of document : Öffnendes Anführungszeichen wird für Attribut "{1}" erwartet, das mit Elementtyp "name" verknüpft ist. Nested exception: Öffnendes Anführungszeichen wird für Attribut "{1}" erwartet, das mit Elementtyp "name" verknüpft ist.
at org.dom4j.io.SAXReader.read(SAXReader.java:482)
at org.hibernate.cfg.Configuration.doConfigure(Config uration.java:2157)
... 3 more
Es liegt an den 'typografischen' Anführungszeichen:

statt
<property name=”hibernate.default_schema”>Umweltlabor</property>

muss es
<property name="hibernate.default_schema">Umweltlabor</property>

sein, 'typographisch schöne' Anführungszeichen sind in XML nicht als Begrenzer der Attribute erlaubt.

BörmtDieBuse 12. Mai 2015 09:39

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von mjustin (Beitrag 1301155)
Es liegt an den 'typografischen' Anführungszeichen:

statt
<property name=”hibernate.default_schema”>Umweltlabor</property>

muss es
<property name="hibernate.default_schema">Umweltlabor</property>

sein, 'typographisch schöne' Anführungszeichen sind in XML nicht als Begrenzer der Attribute erlaubt.

Oh mein Gott, mjustin du bist der beste, kann man dir nicht ihrgendwie ein Cookie geben oder so was^^, da wär ich ja nie drauf gekommen.

Ich denke nur das unsere Annahme falsch ist, das man mit

<property name="hibernate.default_schema">Umweltlabor</property

auf die entsprechende DB zugreifen kann.
Da ich diese Fehlermeldung für jede Tabelle bekomm und anscheinend denkt er das Schema was mit Benutzer zu tun hat.

Zitat:

Hibernate:
create table Umweltlabor.Project (
id number(10,0) not null,
projectNr varchar2(255 char),
projectStatus number(1,0) not null,
primary key (id)
)
Mai 12, 2015 10:26:26 AM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: HHH000389: Unsuccessful: create table Umweltlabor.Project (id number(10,0) not null, projectNr varchar2(255 char), projectStatus number(1,0) not null, primary key (id))
Mai 12, 2015 10:26:26 AM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: ORA-01918: Benutzer 'UMWELTLABOR' ist nicht vorhanden

mjustin 12. Mai 2015 10:05

AW: Hibernate und DAO und Reports
 
Zitat:

Hibernate:
create table Umweltlabor.Project (
id number(10,0) not null,
projectNr varchar2(255 char),
projectStatus number(1,0) not null,
primary key (id)
)
Mai 12, 2015 10:26:26 AM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: HHH000389: Unsuccessful: create table Umweltlabor.Project (id number(10,0) not null, projectNr varchar2(255 char), projectStatus number(1,0) not null, primary key (id))
Mai 12, 2015 10:26:26 AM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: ORA-01918: Benutzer 'UMWELTLABOR' ist nicht vorhanden
Könnte es mit der Gross- und Kleinschreibung zusammenhängen?

https://community.oracle.com/thread/2342992

Auch würde ich versuchen den am bessten passenden Oracle Dialekt in der hibernate.cfg.xml einzutragen. OracleDialect ist "veraltet", man kann zum Beispiel org.hibernate.dialect.Oracle10gDialect für 10g verwenden:

https://docs.jboss.org/hibernate/orm...0gDialect.html

BörmtDieBuse 12. Mai 2015 10:27

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von mjustin (Beitrag 1301160)

Könnte es mit der Gross- und Kleinschreibung zusammenhängen?

https://community.oracle.com/thread/2342992

Auch würde ich versuchen den am bessten passenden Oracle Dialekt in der hibernate.cfg.xml einzutragen. OracleDialect ist "veraltet", man kann zum Beispiel org.hibernate.dialect.Oracle10gDialect für 10g verwenden:

https://docs.jboss.org/hibernate/orm...0gDialect.html

Ich benutze als Dialekt Oracle10gDialect.
Hab hab es probiert mit "UMWELTLABOR" und "umweltlabor", ist leider kein Unterscheid erkennbar. Es kommt die selbe Fehlermeldung.

mjustin 12. Mai 2015 10:48

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von BörmtDieBuse (Beitrag 1301163)
Hab hab es probiert mit "UMWELTLABOR" und "umweltlabor", ist leider kein Unterscheid erkennbar. Es kommt die selbe Fehlermeldung.

Diverse Internetquellen sagen*) dass in Oracle User und Schema (fast) das selbe Ding sind. Wenn die Fehlermeldung lautet "Benutzer 'UMWELTLABOR' ist nicht vorhanden", dann vermute ich, Schema und Benutzer haben verschiedene Namen. Das Schema ist 'Umweltlabor'. Wird für die Anmeldung von Hibernate ein anderer Benutzer verwendet?

* ) z.B. unter difference between a User and a Schema in Oracle?:
Zitat:

"for all intents and purposes just consider user = schema = user = schema = the same thing"

BörmtDieBuse 12. Mai 2015 12:12

AW: Hibernate und DAO und Reports
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von mjustin (Beitrag 1301167)
Diverse Internetquellen sagen*) dass in Oracle User und Schema (fast) das selbe Ding sind. Wenn die Fehlermeldung lautet "Benutzer 'UMWELTLABOR' ist nicht vorhanden", dann vermute ich, Schema und Benutzer haben verschiedene Namen. Das Schema ist 'Umweltlabor'. Wird für die Anmeldung von Hibernate ein anderer Benutzer verwendet?

* ) z.B. unter difference between a User and a Schema in Oracle?:
Zitat:

"for all intents and purposes just consider user = schema = user = schema = the same thing"


Im Anhang hab ich mal verdeutlicht wie es bei mir aussieht. Der Benutzername ist anders, weil "Umweltlabor" und "Test"
kein Benutzername ist, sondern der Name von 2 Verbindungen aka Datenbanken (denk ich mal).

Deswegen leg ich auch so den Benutzer fest.
Code:
<property name="hibernate.connection.username">qqrhldb</property>

jobo 12. Mai 2015 12:16

AW: Hibernate und DAO und Reports
 
*blödsinn geschrieben*

mjustin 12. Mai 2015 12:17

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von BörmtDieBuse (Beitrag 1301180)

Deswegen leg ich auch so den Benutzer fest.
Code:
<property name="hibernate.connection.username">qqrhldb</property>

Auf http://java.dzone.com/articles/hiber...settings-derby (und auf https://karussell.wordpress.com/2009...oracle-and-h2/) ist schön zu sehen dass Benutzer und Schemaname in der Hibernate-Konfiguration für den Oracle thin Treiber gleich sind:
Code:
<property name="hibernate.connection.username">YOURSCHEMA</property>
<property name="hibernate.connection.password">YOURPASSWORD</property>
<property name="hibernate.default_schema">YOURSCHEMA</property>
Dann sollte das hier auch funktionieren:
Code:
<property name="hibernate.connection.username">qqrhldb</property>
<roperty name="hibernate.connection.password">...</property>
<property name="hibernate.default_schema">qqrhldb</property>
Ich tippe, der Verbindungsname 'Umweltlabor' ist nur der frei wählbare Anzeigename in der IDE und hat keinen Einfluss.

BörmtDieBuse 12. Mai 2015 14:10

AW: Hibernate und DAO und Reports
 
Ich hab gerade herausgefunden, das wenn ich mit Hibernate auf die DB zugreif und eine Tabelle hinzufüge.
Dann wird es automatisch auf beiden "DB" Namen hinzugefügt. Also in "Test" und in "Umweltlabor".

Ich darf wahrscheinlich "Test" und Umweltlabor" nicht als DBs betrachten.
Die eigentliche DB ist "qqrhldb" und es gibt keine Möglichkeit zwischen den Verbindungsnamen durchzuwechseln.

jobo 12. Mai 2015 14:45

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von BörmtDieBuse (Beitrag 1301210)
Ich darf wahrscheinlich "Test" und Umweltlabor" nicht als DBs betrachten.
Die eigentliche DB ist "qqrhldb" und es gibt keine Möglichkeit zwischen den Verbindungsnamen durchzuwechseln.

Also bei Oracle ist es so, dass mehrere User (Schemata) in einer DB liegen können und es auch von Anfang tun, wenn man eine neue erzeugt (per default), also eine Hand voll Standarduser, dann noch die, die man selber anlegt.

Jeder Benutzer/Schema hat eigene Objekte, Datenmodell, Tabellen und Zugriffsrechte. Eine DB hat viele Nutzer, eine Installation kann viele DB haben, ein Rechner kann viele Installationen (also unterschiedliche Oracle Versionen oder Konfigurationen) haben.

Ich hab keine Ahnung von Hibernate, aber
in Deinem Fall ist laut Bild http://www.delphipraxis.net/attachme...rts-schema.png
der Nutzer qqrhldb, der Verbindungsname Umweltlabor oder Test ist eine Hibernatesache, die beliebig vergeben werden kann und nichts mit einer Oracle DB zu tun hat. Kann heißen wie es will und alles auf verschiedene oder die gleiche DB gehen und
auf den gleichen Nutzer!
So sieht es zumindest bei Dir (soweit man das auf dem Bild erkennen kann) so aus und das ergibt scheinbar den Effekt, dass es auf "beiden" Systemen "eingespielt" wird.

BörmtDieBuse 13. Mai 2015 07:48

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von jobo (Beitrag 1301219)
Also bei Oracle ist es so, dass mehrere User (Schemata) in einer DB liegen können und es auch von Anfang tun, wenn man eine neue erzeugt (per default), also eine Hand voll Standarduser, dann noch die, die man selber anlegt.

Jeder Benutzer/Schema hat eigene Objekte, Datenmodell, Tabellen und Zugriffsrechte. Eine DB hat viele Nutzer, eine Installation kann viele DB haben, ein Rechner kann viele Installationen (also unterschiedliche Oracle Versionen oder Konfigurationen) haben.

Ich hab keine Ahnung von Hibernate, aber
in Deinem Fall ist laut Bild http://www.delphipraxis.net/attachme...rts-schema.png
der Nutzer qqrhldb, der Verbindungsname Umweltlabor oder Test ist eine Hibernatesache, die beliebig vergeben werden kann und nichts mit einer Oracle DB zu tun hat. Kann heißen wie es will und alles auf verschiedene oder die gleiche DB gehen und
auf den gleichen Nutzer!
So sieht es zumindest bei Dir (soweit man das auf dem Bild erkennen kann) so aus und das ergibt scheinbar den Effekt, dass es auf "beiden" Systemen "eingespielt" wird.

Ok, ich begnüg mich jetzt einfach damit, das ich nicht zwischen den Verbindungsnamen wechseln kann.
Ich habe Test und Umweltlabor selber angelegt um meine Programmierung bei "Test" testen zu können bevor ich final auf Umweltlabor zugreif, deswegen wollte ich seperat zugreifen können.


Ich hätte aber noch eine andere Frage wegen Redundanzen.
Ich habe mehrere Tabellen mit einer Spalte Barcodes. Die Spalte Barcodes hat bei jeder Tabelle ein verändertes Format.
Natürlich hab ich aber bei jeder Tabelle auch eine Spalte ID. So ein Barcode setzt sich aber zusammen aus einem Präfix und der ID, z.B. PV_1.
Präfix = PV, ID = 1

Da ID und Barcode in ein und der selben Tabelle sind, wird ja die Redundanz verletzt. Gibt Oracle bei sowas eine Fehlermeldung aus?
Ich würde ungern die Spalte Barcode wegnehmen, da ich den kompletten Barcode in meiner Datenbank haben möchte und die ID wegzulassen kommt mir ihrgenwie falsch vor.
Sorry wenn das eine dumme Frage sein sollte, aber ich habe keine Erfahrung in Datenbanken.
Schonmal Danke im Vorraus.

jobo 13. Mai 2015 09:52

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von BörmtDieBuse (Beitrag 1301321)

Ich hätte aber noch eine andere Frage wegen Redundanzen.
Ich habe mehrere Tabellen mit einer Spalte Barcodes. Die Spalte Barcodes hat bei jeder Tabelle ein verändertes Format.
Natürlich hab ich aber bei jeder Tabelle auch eine Spalte ID. So ein Barcode setzt sich aber zusammen aus einem Präfix und der ID, z.B. PV_1.
Präfix = PV, ID = 1

Da ID und Barcode in ein und der selben Tabelle sind, wird ja die Redundanz verletzt. Gibt Oracle bei sowas eine Fehlermeldung aus?
Ich würde ungern die Spalte Barcode wegnehmen, da ich den kompletten Barcode in meiner Datenbank haben möchte und die ID wegzulassen kommt mir ihrgenwie falsch vor.

Ich glaub, ich hab die Frage nicht verstanden.
Wenn 2 Spalten gemeinsam ein eindeutiger Schlüssel sein sollen, kannst Du einen unique constraint definieren, am besten mit dem entsprechenden unique index.
Welche Redundanz wird wann verletzt? Meinst Du vielleicht die Eindeutigkeit wird verletzt?
Möchtest Du beide Spalten zu einer zusammenfassen?

BörmtDieBuse 13. Mai 2015 10:27

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von jobo (Beitrag 1301332)
Ich glaub, ich hab die Frage nicht verstanden.
Wenn 2 Spalten gemeinsam ein eindeutiger Schlüssel sein sollen, kannst Du einen unique constraint definieren, am besten mit dem entsprechenden unique index.
Welche Redundanz wird wann verletzt? Meinst Du vielleicht die Eindeutigkeit wird verletzt?
Möchtest Du beide Spalten zu einer zusammenfassen?

Mir hat ein Informatiker mal gesagt, das man keine Primärschlüssel machen soll, die aus 2 Spalten bestehen.
Ja ich denke es wird die Eindeutigkeit verletzt, da die ID und der Barcode gleich sind, außer das der Barcode noch diese Präfix "PV_" davor hat. PV_1
Ich möchte die Spalte Barcode behalten, damit ich den Barcode komplett in meiner Datenbank hab. Dann muss der Datentyp aber String sein. Der Barcode lässt sich aber nicht autoamtisch inkrementieren, weil er halt ein String ist. Deswegen lasse ich die Spalte ID drin, die wird dann inkrementiert.

jobo 13. Mai 2015 10:55

AW: Hibernate und DAO und Reports
 
Zitat:

Zitat von BörmtDieBuse (Beitrag 1301335)
Mir hat ein Informatiker mal gesagt, das man keine Primärschlüssel machen soll, die aus 2 Spalten bestehen.
Ja ich denke es wird die Eindeutigkeit verletzt, da die ID und der Barcode gleich sind, außer das der Barcode noch diese Präfix "PV_" davor hat. PV_1
Ich möchte die Spalte Barcode behalten, damit ich den Barcode komplett in meiner Datenbank hab. Dann muss der Datentyp aber String sein. Der Barcode lässt sich aber nicht autoamtisch inkrementieren, weil er halt ein String ist. Deswegen lasse ich die Spalte ID drin, die wird dann inkrementiert.

Mehrspaltige Primärschlüssel sind glaub ich höchstens ein Problem der Handhabung, also in dem Sinne, dass dort mehr Sorgfalt geboten ist, sind aber nicht verboten.
Ist der Präfix konstant, also immer PV?
Du kannst eine virtuelle Barcodespalte bauen, die ID und konstanten Präfix zusammenfasst oder ID und variablen Präfix. Das würde man mit einem View machen.
Redundanz an sich ist auch kein Nogo, man muss nur (tot)sicherstellen, dass alles synchron bleibt. Da ist dann die Frage, wieviel Aufwand man dafür treibt und warum. Macht man z.B: aus Performancegründen.
Ich würde aber immer erstmal den Weg gehen, redundanzfrei zu bleiben und die Darstellung zu ändern (also View, virtuelle, zusammengesetzte Spalte anlegen). Auch das muss aber durchdacht sein, damit immer der konsistente Zugriff auf den View und die Editierbarkeit-sofern nötig- gegeben ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz