Delphi-PRAXiS
Seite 1 von 3  1 23      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 Uhr.
Seite 1 von 3  1 23      

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