tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
13
ZUGRIFFE
1854
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Tobias Köhler Tutorials.de Gastzugang
    Hallo Leute,
    ich versuche grad den Einstieg in Hibernate zu finden. Das wird dadurch erschwert, dass gleich die 2. Zeile nicht klappt

    Laut Buch(Spring&Hibernate) muss ich bei der Klasse, um diese als Tabelle speichern zu können die Annotations einfügen:
    Code java:
    1
    2
    
    @Entity
    @Table(name = "Tabellenname") // Definiert einen Namen abweichend vom Klassennamen

    nun meckert Eclipse aber an Table und name rum.
    The annotation @Table must define the attribute appliesTo
    The attribute name is undefined for the annotation type Table

    wo liegt das Problem? Organize Imports bringt auch nix.

    LG Tobias
     

  2. #2
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.960
    Guck dir mal deine Imports an, hast du auch wirklich das richtig Table erwischt?
     

  3. #3
    Tobias Köhler Tutorials.de Gastzugang
    import org.hibernate.annotations.Table;

    geh ich mal von aus, dass der richtig ist
     

  4. #4
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.960
    Laut Doku: http://www.hibernate.org/hib_docs/an...ons/Table.html

    Handelt es sich bei appliesTo um den Namen der Tabelle. Also benutz dass doch einfach so.

    Ein @Table mit name kommt z.B. in JPA vor: http://www.oracle.com/technology/pro...ons.html#Table

    Sollte aber beides funktionieren. JPA ist allgemein eine "Java Persistence API" während Hibernate für Persistenz in eine Datenbank zuständig ist. Willst du also deine Persistenzschicht einfach ändern können, so solltest du die JPA Annotations benutzen, willst du nur mit Hibernate arbeiten, kannst du auch die von Hibernate verwenden.
     

  5. #5
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Was du durcheinander wirfst, sind JPA Annotations und Hibernate Annotations. In JPA hat die Annotation Table die Attribute, wie du sie in deinem Codestück verwendest. Die Hibernate Annotation Table benötigt die Attribute wie in der Fehlermeldung angegeben.

    Entweder ist also das Buch nicht sehr genau (könnte bei dem ein oder anderen Verlag durchaus der Fall sein ) oder du hast es einfach verwechselt. Ich würde dir raten auf JPA zu setzen, da du damit weigehend unabhängig von deinem Persistence Provider bleibst und damit (theoretisch) diesen ercht einfach austauschen kannst.

    Es sollte reichen, das JPA Jar in den Classpath aufzunehmen und den Import zu korrigieren.

    Gruß
    Ollie

    PS: da war wohl jemand schneller :P
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  6. #6
    Tobias Köhler Tutorials.de Gastzugang
    Oh, danke Vom Verständnis hat mir das viel gebracht. Aber leider tu ich mich schwer damit, das einzubinden. Bzw das Auffinden der jpa.jar. Wo finde ich die?
     

  7. #7
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Lauf Hibernate Webseite liegen die dem Hibernate Annotations bei. Also die Klassen auf jeden Fall, müssen nicht unbeding in einem Extra JAR liegen.

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  8. #8
    Tobias Köhler Tutorials.de Gastzugang
    Hm, das ist dann aber schon eigenartig. Denn die Annotations habe ich ja eingebunden.
     

  9. #9
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Was heißt "hab ich eingebunden"? Als Maven Dependency deklariert? Als User Library in Eclipse? Welche Jars aus dem Download?

    REINHAUN!
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  10. #10
    Tobias Köhler Tutorials.de Gastzugang
    Maven Dependency--> sagt mir nix
    Im BuildPath habe ich hibernate3.jar, hibernate-annotations.jar, ejb3-persistence, cglib-2.1.3.jar, antlr-2.7.6.jar, asm.jar und jta.jar, die Logging-Sachen lasse ich jetzt mal weg
     

  11. #11
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Dann solltest du in ejb3-persistence.jar eine Annotation javax.persistenceTable finden...

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  12. #12
    Tobias Köhler Tutorials.de Gastzugang
    Danke jetzt ist alles klar...vorerst auf jeden Fall
     

  13. #13
    Tobias Köhler Tutorials.de Gastzugang
    So, mit den Annotations klappt jetzt alles. Nun möchte ich zum ersten Mal Daten speichern. Um mein Problem zu beschreiben muss ich allerdings etwas ausholen.
    Vereinfacht gesagt habe ich 2 Klassen(Class und Article). Zwischen diesen gibt es eine 1:N-Beziehung(Class kann mehrere Article haben, Article jeweils nur eine Class). Folglich muss nun in der Article-Tabelle ein Fremdschlüssel sein oder, wie ich jetzt in Hibernate weiß, folgender Code:
    Code java:
    1
    2
    3
    4
    5
    6
    
    @ManyToOne(optional = false)
    @JoinColumn(name = "class_id")
    public ErpClass getErpClass()
    {
        return erpClass;
    }
    Um zu sichern, dass die Daten konsistent bleiben, benutze ich Transaktionen. Hier liegt das Problem: Wie kann ich einem Article nun eine Class zuweisen, wenn ich dies aber in getrennten Transaktionen laufen lasse. Code zum verdeutlichen:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    Transaction transaction = session.beginTransaction();
    try
    {
        ErpClass erpClass = new ErpClass();
        erpClass.setName("FD");         
        transaction.commit();
    }
    catch(Exception e){transaction.rollback();System.out.println(e);}
    finally{session.close();}
            
    transaction = session.beginTransaction();
    try
    {
        Article article = new Article();
        article.setErpClass(.......) // wie soll ich das hier machen?       
        transaction.commit();
    }
    catch(Exception e){transaction.rollback();System.out.println(e);}
    finally{session.close();}
    Ich hoffe, ich habe mein Problem verständlich beschrieben
    LG Tobias
     

  14. #14
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Die elegante Variante wäre auf JPA zu setzen und den ganzen Session Kram sein zu lassen. Grundsätzlich musst du entweder die ErpClass nochmal laden (byPrimaryKey) oder diese halt in die neue Transaktion mergen (mit JPA: em.merge(erpClass)).

    Grundsätzlich solltest du dir den Gefallen tun und Hibernate hinter JPA benutzen. Von deinen 19 Zeilen Code oben sind eigentlich nur 6 fachlich relevant. Warum so viel technischen Code schreiben, wenn dir das wer abnehmen kann.

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

Ähnliche Themen

  1. Hibernate-Annotations-Problem
    Von 7bkahnt im Forum Java
    Antworten: 2
    Letzter Beitrag: 23.04.10, 13:43
  2. Hibernate Annotations: Filtern OneToMany Beziehung
    Von Sentoo im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 24.08.09, 15:09
  3. [Hibernate] Problem mit Annotations
    Von AndreBrueck im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 28.06.09, 22:01
  4. Spring2 + Hibernate + Annotations + Service + DAO > insert ?
    Von Nobody im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 8
    Letzter Beitrag: 15.05.09, 12:00
  5. Hibernate Annotations
    Von drezze im Forum Java
    Antworten: 0
    Letzter Beitrag: 28.11.08, 08:36