[Hibernate] Laden aus DB funktioniert nicht

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo zusammen,

ich habe eine Entität "AnnualStatistics" erstellt, die unter Hibernate und in der DB folgendermaßen aufgebaut ist:

Erzeugung der Tabelle in der DB:
Code:
CREATE TABLE tbl_Jahresstatistik (JahresstatistikID INTEGER IDENTITY, Jahr INTEGER, Urlaubstage INTEGER, UebertragUrlaubstageAltesJahr INTEGER, Sonderurlaub INTEGER, GenommeneUrlaubstage INTEGER, Ueberstunden VARCHAR, UeberstundenAltesJahr VARCHAR);

In der Hibernate-XML-Datei:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="de.cnm.zeitstempel.common">
  <class name="AnnualStatistics" table="tbl_Jahresstatistik" >
  			<id name="annualStatisticsID" column="JahresstatistikID">
            <generator class="native"/>
    </id>
  			<property name="year" type="int" column="Jahr"></property>
  			<property name="holidays" type="int" column="Urlaubstage"></property>
    		<property name="amountHolidaysOldYear" type="int" column="UebertragUrlaubstageAltesJahr"></property>
    		<property name="specialHolidays" type="int" column="Sonderurlaub"></property>
    		<property name="takenHolidays" type="int" column="GenommeneUrlaubstage"></property>
    		<property name="overtime" type="string" column="Ueberstunden"></property>
    		<property name="overTimeOldYear" type="string" column="UeberstundenAltesJahr"></property>
  </class>

</hibernate-mapping>

In der Klasse die wichtigsten Stellen:
Code:
public class AnnualStatistics extends Observable implements IAbstractModel
{
  private Integer annualStatisticsID;
  private int year;
  private int holidays;
  private int specialHolidays;
  private int takenHolidays;
  private int amountHolidaysOldYear;
  private String overtime;
  private String overTimeOldYear;

  //----Getter und Setter-----

  public List loadAllData()
  {
    Session session = HibernateSessionFactory.currentSession();

    Criteria crit = session.createCriteria(AnnualStatistics.class);
    List results = crit.list();

    session.flush();
    HibernateSessionFactory.closeSession();
    session.close();
    dbclose.shutdown();
     
    return results;
  }

  public List loadData(int years)
  {
    Session session = HibernateSessionFactory.currentSession();

    Criteria crit = session.createCriteria(AnnualStatistics.class);
    AnnualStatistics statistic = new AnnualStatistics();

    statistic.setYear(years);
    crit.add(Example.create(statistic));
    List results = crit.list();

    session.flush();
    HibernateSessionFactory.closeSession();
    session.close();
    dbclose.shutdown();
    return results;
  } 
}

Ein Datensatz zu der Jahresstatistik existiert bereits.
Wenn ich mit der Methode loadData(int years) nun diese Statistik laden möchte, erhalte ich kein Ergebnis. Aufruf der Methode:
Code:
public class Test
{
  public static void main(String[] args)
  {
    Calculate calc = new Calculate();
    AnnualStatistics statistics = new AnnualStatistics();
    List list = statistics.loadData(2008);
    for (int i=0; i<list.size(); i++)
    {
      AnnualStatistics statistic = (AnnualStatistics) list.get(i);
      System.out.println(statistic.getYear());
    }
  }
}

Ein Aufruf mit der Methode loadAllData() funktioniert jedoch. Hat jemand dafür eine Erklärung?

P.S: Die Jahresstatistik 2008 existiert ;-).
 
S

SlaterB

Gast
was ist denn mit den anderen Feldern,
z.B. int holidays=0

ist in der DB das entsprechende Feld auch 0?

warum sollte nur jahr=2008 berücksichtigt werden, aber holidays=0 nicht? sind doch beides normale Zahlen,

gut, Hibernate hat das auch schon erkannt, nach
http://www.hibernate.org/hib_docs/reference/en/html/querycriteria.html

gibts .excludeZeroes() in Example, das klingt passend
(und vielleicht noch etwas mehr an die dortige Syntax halten),

wer weiß was aber sonst noch bei so komplexen Sachen schiefgehen kann..

---------------------

guter Tipp:
die loadData() + loadAllData() unbedingt aus AnnualStatistics rausnehmen,
kann in eine Logik-Klasse AnnualStatisticsLoader, AnnualStatisticsLoaderDAO oder ähnliches,
aber doch nicht direkt in die Datenklasse!

grausig
 

byte

Top Contributor
Mach mal ne Transaktion auf + commit()

Code:
  public List loadData(int years)
  {
    Session session = HibernateSessionFactory.currentSession();

    session.beginTransaction();   //  <<< zunächst muss eine Transaktion geöffnet werden

    Criteria crit = session.createCriteria(AnnualStatistics.class);
    AnnualStatistics statistic = new AnnualStatistics();

    statistic.setYear(years);
    crit.add(Example.create(statistic));
    List results = crit.list();
    session.getTransaction().commit();   // <<< erst das commit der Transaktion führt die DB-Anfrage aus

    session.flush();
    HibernateSessionFactory.closeSession();
    session.close();
    dbclose.shutdown();
    return results;
  } 
}
 
G

Guest

Gast
@Byto: Ich habs mit deiner Methode versucht, allerdings wird das statement zwar ausgeführt, aber ich erhalte kein Ergebnis. Mit der loadAll()-Methode erhalte ich ja auch alle Datensätze, nur mit dieser Methode leider nicht.
In meiner Datenbank habe ich folgenden Datenbestand:
JahrestatistikID: 1
Jahr: 2008
Urlaubstage: 30
UebertragUrlaubstageAltesJahr: 0
Sonderurlaub: 0
GenommenerUrlaub: 30
Ueberstunden: 00:00:00
UeberstundenAltesJahr: 00:00:00
 

SnooP

Top Contributor
Ich würde an der Stelle nicht mit Examples arbeiten - mach eine ganz normale Criteria-Abfrage mit Restrictions... und schalte in der hibernate-config den schalter: <property name="show_sql">true</property> an - dann kannst du mit dem generierten sql direkt an die db gehen und gucken, ob das sql korrekt ist, meist hilft das bei der Fehlersuche enorm.
 

byte

Top Contributor
Anonymous hat gesagt.:
@Byto: Ich habs mit deiner Methode versucht, allerdings wird das statement zwar ausgeführt, aber ich erhalte kein Ergebnis. Mit der loadAll()-Methode erhalte ich ja auch alle Datensätze, nur mit dieser Methode leider nicht.
In meiner Datenbank habe ich folgenden Datenbestand:
JahrestatistikID: 1
Jahr: 2008
Urlaubstage: 30
UebertragUrlaubstageAltesJahr: 0
Sonderurlaub: 0
GenommenerUrlaub: 30
Ueberstunden: 00:00:00
UeberstundenAltesJahr: 00:00:00
Dann ist es doch logisch, dass Du nichts zurück bekommst. Du setzt im Example nur das Jahr. Der Datensatz trifft also nicht zu, weil dort ja auch noch Urlaubstage und GenommenerUrlaub gesetzt sind. Es werden nur null-Werte automatisch excluded. Wenn Du diese Werte beim Example ignorieren möchtest, dann musst Du das explizit angeben:
Code:
example.excludeProperty("xyz")
Wie SnooP schon sagte - bei einem Property ist Example nicht sinnvoll. Mach stattdessen einfach folgendes:
Code:
crit.add(Restrictions.eq("year", years));
 
G

Guest

Gast
Super, vielen Dank für den Hinweis. Hat auch so geklappt. Eine Frage noch: Wieso funktioniert das, wenn als Datentyp String für das Jahr, Urlaubstage und GenommenerUrlaub verwendet wird und für einen int-Wert nicht?
 
S

SlaterB

Gast
hallo?
hab ich alles im ersten Posting schon erschöpfend erzählt ;)

dass int=0 ein respektabler Wert im Gegensatz zu Objekt=null ist, dürfte klar sein
 
G

Guest

Gast
Danke, sorry das ich das erst jetzt verstanden habe. Aber lieber spät als nie ;-).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F [Hibernate] Alle Objekte laden aus der DB laden Java Basics - Anfänger-Themen 6
I Element n aus Datenbank Query (JPA / Hibernate) Java Basics - Anfänger-Themen 3
I JPA / Hibernate "Predicate" kombinieren in der gleichen Query Java Basics - Anfänger-Themen 1
I BLOB / CLOB und Hibernate... Ratschläge benötigt Java Basics - Anfänger-Themen 10
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
D hibernate annotation Java Basics - Anfänger-Themen 2
D hibernate: string vs setparameter Java Basics - Anfänger-Themen 1
V kennt jemand empfehlenswerte online tutorials zur Hibernate ? gerne auch englisch. Java Basics - Anfänger-Themen 4
Todesbote Int Array mit Hibernate in Datenbank speichern. Java Basics - Anfänger-Themen 2
DStrohma Best Practice Hibernate für kleine Anwendung nutzen? Java Basics - Anfänger-Themen 4
I Hibernate Java Basics - Anfänger-Themen 4
T Hibernate Fehlermeldung Java Basics - Anfänger-Themen 9
D [Hibernate] Objektinhalte auslesen Java Basics - Anfänger-Themen 8
N Hibernate "Hello World" Tutorial gesucht Java Basics - Anfänger-Themen 9
F Logging von Hibernate-Statements und Glassfish Java Basics - Anfänger-Themen 2
G Maps und Hibernate - Performancefrage Java Basics - Anfänger-Themen 2
G hibernate . tutorial prob . Java Basics - Anfänger-Themen 4
G org.hibernate.MappingException:An AnnotationConfiguration. Java Basics - Anfänger-Themen 3
G [Hibernate] Node to traverse cannot be null Java Basics - Anfänger-Themen 3
G java.lang.IllegalArgumentException -> Hibernate Java Basics - Anfänger-Themen 2
G Hibernate, JDO und Alternativen Java Basics - Anfänger-Themen 4
G [Hibernate] Richtiger ColumnType Java Basics - Anfänger-Themen 2
G [Hibernate] Aus SQL-Statement Entities erzeugen Java Basics - Anfänger-Themen 2
G [Hibernate] Constraints über mehrere Tabellen Java Basics - Anfänger-Themen 2
G [Hibernate] Could not find a setter for property Java Basics - Anfänger-Themen 2
M [Hibernate] "Illegal start of expression"-Fehler b Java Basics - Anfänger-Themen 2
B Hibernate - DB2 - Java Java Basics - Anfänger-Themen 3
M [Hibernate]: Cascade-Frage Java Basics - Anfänger-Themen 4
S Hibernate Session: Wie in alle Klassen Java Basics - Anfänger-Themen 19
M [Hibernate] Speichern von ManyToOne-Beziehungen in der DB Java Basics - Anfänger-Themen 12
G JTable aus Hibernate Zeile löschen Java Basics - Anfänger-Themen 4
H [Hibernate] HibernateSessionFactory Pfad setzen Java Basics - Anfänger-Themen 4
G [Hibernate] Dynamischer Datenbankpfad Java Basics - Anfänger-Themen 4
G [Hibernate] Beschränkte Selektion Java Basics - Anfänger-Themen 2
G [Hibernate] StaleStateException beim Löschen Java Basics - Anfänger-Themen 3
G Einfacher Anfang mit Hibernate Java Basics - Anfänger-Themen 4
F [Hibernate] Debug INFO Einstellungen Java Basics - Anfänger-Themen 5
F [Hibernate] Id aus DB auslesen Java Basics - Anfänger-Themen 5
C Hibernate und Mandantenfähigkeit Java Basics - Anfänger-Themen 7
G hibernate tutorial Java Basics - Anfänger-Themen 3
R Verständnisproblem mit Hibernate Java Basics - Anfänger-Themen 2
N Hibernate will nicht so wie ich Java Basics - Anfänger-Themen 4
I Dateien aus dem Resource Folder laden Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I SWT Plattformunabhängig laden - verschiedene SWT .jar laden Java Basics - Anfänger-Themen 0
C XML Datei speichern und laden Java Basics - Anfänger-Themen 18
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
I Datei als Stream aus Ressource laden? Java Basics - Anfänger-Themen 2
M Tabellen- Daten laden Java Basics - Anfänger-Themen 2
K File (png) in Image laden Java Basics - Anfänger-Themen 3
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
S Bilder in .jar Datei laden Java Basics - Anfänger-Themen 10
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
S Kann keine Bilder laden? Java Basics - Anfänger-Themen 9
C Problem: PC ohne Internet und keine Möglichkeit Programme zu laden Java Basics - Anfänger-Themen 5
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
L Fehler beim laden eines Icons Java Basics - Anfänger-Themen 3
L Resourcen laden klappt nicht Java Basics - Anfänger-Themen 2
L Speichern und Laden Java Basics - Anfänger-Themen 7
F File von Windowsfreigabe laden Java Basics - Anfänger-Themen 1
H Interface Objekte speichern und laden (serialisieren/deserialisieren) Java Basics - Anfänger-Themen 1
H Image laden Java Basics - Anfänger-Themen 4
B Image laden im GridBagLayout Java Basics - Anfänger-Themen 3
D Laden und leeren von Comboboxen Java Basics - Anfänger-Themen 8
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
B Klassen Klasse dynamisch laden. Java Basics - Anfänger-Themen 8
F Daten auf Webserver laden - wiederholen bei Fehler Java Basics - Anfänger-Themen 0
S Serialisierung: Laden von Objekten - Risiken? Java Basics - Anfänger-Themen 4
R Eine Arrayliste in XML abspeichern und laden können Java Basics - Anfänger-Themen 7
J App auf einen Webserver laden Java Basics - Anfänger-Themen 14
S Gespeichertes aus ArrayList laden mithilfe der For-Schleife Java Basics - Anfänger-Themen 12
C Problem beim laden eines BufferedImage Java Basics - Anfänger-Themen 2
C Klassen aus einem Package ermitteln und per Laufzeit laden Java Basics - Anfänger-Themen 17
S LWJGL - Matrix vom Matrixstack laden Java Basics - Anfänger-Themen 3
Seikuassi Objekte in Datei reihenweise speichern/laden Java Basics - Anfänger-Themen 3
W (XML/XSL) Daten aus Eclipse in eine Klasse Laden. Java Basics - Anfänger-Themen 1
F Operatoren Enum aus Textdabei laden Java Basics - Anfänger-Themen 3
B Listener beim Laden (deserialize) wieder hinzufügen bzw. mitspeichern? Java Basics - Anfänger-Themen 3
T Android App: Laden dauert lange Java Basics - Anfänger-Themen 1
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
S Aus einer Klasse eine andere laden Java Basics - Anfänger-Themen 6
C Daten speichern und laden Java Basics - Anfänger-Themen 6
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
B Bilder laden und drauf zugreifen[Eclipse] Java Basics - Anfänger-Themen 9
M Datei zu DropBox laden Java Basics - Anfänger-Themen 2
M Website im Hintergrund laden Java Basics - Anfänger-Themen 5
M Icon laden und anzeigen Java Basics - Anfänger-Themen 2
L Termin in Array speichern/laden Java Basics - Anfänger-Themen 21
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
T Bild laden Java Basics - Anfänger-Themen 7
S Image in Panel laden Java Basics - Anfänger-Themen 12
L Input/Output Sortieren Speichern Laden von ArrayListe Java Basics - Anfänger-Themen 14
H JButton - Icon(.png) aus resources laden Java Basics - Anfänger-Themen 23
J Laden von Dateien Java Basics - Anfänger-Themen 19
K ImageIcon laden Java Basics - Anfänger-Themen 6
M Problem mit null pinterexception beim laden von Bildern Java Basics - Anfänger-Themen 20
J NullPointerException bei Laden von Bilddatei Java Basics - Anfänger-Themen 16
C Automatisches Ausfuehren einer Funktion beim Laden eines Jar files Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben