[Hibernate] Id aus DB auslesen

Status
Nicht offen für weitere Antworten.

Fenixx

Aktives Mitglied
Guten Morgen,

da ich die ersten Schritte mit Hibernate bereits gemacht habe, stellt sich mir nun die Frage, wie ich die ID/IDs eines Datensatzes auslesen kann. Dabei habe ich ein Objekt Honey beispielsweise, das in der Datenbank aus ID, Name und Taste aufgebaut ist.
Nun will ich beispielsweise ein Objekt aus der DB auslesen, wo ich quasi nur den Geschmack (Taste) kenne. Bei mir in diesem Falle wäre der Taste "sweet".
Das Statement würde also wie folgt aussehen:
SELECT ID FROM THONEY WHERE TASTE = 'sweet'
Dabei erhalte ich mehrere IDs mit dem gleichen "Taste".

Als Lösung in Hibernate dachte ich mir könnte folgender Ansatz sein (der leider fehlerhaft ist):

Code:
package de.laliluna.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
/**
* @author laliluna
*
*/
public class TestClient
{
  public static void main(String[] args)
  {
    
//  [laliluna] create a new object 
    Honey honey2 = new Honey();  
    honey2.setTaste("sweet");
    getID(honey2);
  }
   
   public static Integer getID(Object obj)
  {
    Session session = null; 
    Transaction tx = null; 
    Logger log = Logger.getLogger("TestClient"); 
    log.info("creating honey"); 
    // [laliluna] our returned primary key 
    Integer id = null;
    try
    {
      // [laliluna] get the session from the factory 
      session = HibernateSessionFactory.currentSession(); 
      // [laliluna] always start a transaction before doing something 
      // (even reading) from the database 
      tx = session.beginTransaction();
      System.out.println("---------------------DIE ID LAUTET: "+session.getIdentifier(obj));
      session.flush();
      // [laliluna] clean up (close the session)
      session.close();
      HibernateSessionFactory.closeSession();
      shutdown();
    }
    catch(HibernateException ex)
    {
      ex.printStackTrace();
    }
    return id;
  }
}

Da ich HSQL als Datenbank benutze habe ich eine shutdown()-Methode in der Klasse geschrieben, die ich der Übersicht halber hier nicht extra aufführe.
Mein Honey-Objekt sieht wie folgt aus:

Code:
package de.laliluna.example;
/**
* @author laliluna
*
*/
public class Honey
{
   private Integer id;
   private String name;
   private String taste;
   public Honey()
   {
   }
   /**
    * @return Returns the id.
    */
   public Integer getId()
   {
     return id;
   }
   /**
    * @param id The id to set.
    */
   public void setId(Integer id)
   {
     this.id = id;
   }
   /**
    * @return Returns the name.
    */
   public String getName()
   {
     return name;
   }
   /**
    * @param name The name to set.
    */
   public void setName(String name)
   {
     this.name = name;
   }
   /**
    * @return Returns the taste.
    */
   public String getTaste()
   {
     return taste;
   }
   /**
    * @param taste The taste to set.
    */
   public void setTaste(String taste)
   {
     this.taste = taste;
   }
}

Bei Ausführung der Testklasse erhalte ich folgende Fehlermeldung mit der ich leider nicht viel anfangen kann (auf das Wesentliche gekürzt):

Code:
org.hibernate.TransientObjectException: The instance was not associated with this session
	at org.hibernate.impl.SessionImpl.getIdentifier(SessionImpl.java:1308)
	at de.laliluna.example.TestClient.getID(TestClient.java:230)
	at de.laliluna.example.TestClient.main(TestClient.java:27)

Darüber hinaus kann ich bereits das Objekt in die Datenbank speichern und auch anschließend updaten(wofür man auch die ID braucht). Da man die ID schließlich immer brauchen kann um ein Objekt aus der Datenbank zu lesen, wäre um einen Lösungsansatz sehr froh.
Vielleicht bin auch voll auf dem Holzweg mit meinem Ansatz.
 
S

SlaterB

Gast
sagt dir 'detached Object' was?
eine Session kennt nur die Id von Objekten, die sie verwaltet,

verwende session.lock(object), um es wieder in der Session bekannt zu machen

oder mappe die Id einfach es Exemplarvariable in dem Objekt?

(edit: da du das Objekt neu erstellt hast geht das eh nicht..)

---------


verstehe nicht, was das ganze nun mit der Einschränkung auf TASTE = 'sweet' zu tun hat..
 

Fenixx

Aktives Mitglied
Ich versuch es an einem anderen Beispiel zu erklären:

Angenommen wir haben eine Anwendung um Bücher zu verwalten. Dahinter steht eine Datenbank mit der Table Books bespielsweise.
Das Objekt Buch beinhaltet die Attribute ID, Titel, Autor, Verlag und Erscheinungsdatum (ja ich weiß Attribute werden klein geschrieben :D ).
Der Benutzer gibt in einer Suchfunktion als Titel "JavaFibel" ein. Er kennt also nur einen "kleinen Teil" des Buch-Objekts welches in der DB gespeichert ist. Durch die Angabe dieses Titels soll das vollständige Buch geladen werden. Das hat den Hintergrund, dass der Benutzer später in der Anzeige der Suchtreffer sich das Buch in einer Detailansicht vollständig ansehen kann. D.h. alle Informationen werden aufgelistet (Titel, Autor, Verlag, Erscheinungsdatum).

Unter Umständen gibt es mehrere Bücher mit dem Titel "JavaFibel". Dementsprechend benötige ich mehrere IDs oder sofort alle Objekte zu dem Suchbegriff, um diese aus der DB laden zu können.

Ich hoffe das Problem etwas besser veranschaulichen zu können.

Muss ich demnach die ID der Session bekannt machen? Ist mein Lösungsansatz komplett falsch?
 
S

SlaterB

Gast
irrwitzig ist er,
korrekt wäre ganz normal eine DB-Anfrage zu stellen:
HQL: from Honey where taste = 'sweet'
Session, Query, List usw.

praktischerweise gibts in Hibernate tatsächlich einen Mechanismus, der entsprechend funktioniert,
QBE, Query by Example

da erstellst du ein Criteria aus einem Objekt, führst eine Suche aus
(die bedeutet 'finde alle wie dieses') und bearbeitest die Ergebnisse,

also recht ähnlich, aber immer noch strukturell anders aufgebaut:
du musst aktiv eine DB-Abfrage absetzen


zu QBE siehe
http://www.java2s.com/Code/Java/Hibernate/CriteriaQBEQueryByExampleCriteria.htm

in der Mitte der main-Operation
 

Fenixx

Aktives Mitglied
Vielen Dank, das werd ich mal ausprobieren, aber ich glaube genau danach habe ich gesucht :D .

Tut mir leid, wenn ich mich missverständlich ausgedrückt habe.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D [Hibernate] Objektinhalte auslesen Java Basics - Anfänger-Themen 8
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
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] Laden aus DB funktioniert nicht Java Basics - Anfänger-Themen 8
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] Alle Objekte laden aus der DB laden Java Basics - Anfänger-Themen 6
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
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
T array auslesen Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
U Sekunden von LocalTime auslesen, wie möglich? Java Basics - Anfänger-Themen 1
E Outlook ordner auslesen Java Basics - Anfänger-Themen 4
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
J Jsonfile auslesen Java Basics - Anfänger-Themen 8
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
J Bestimmte parameter aus Jsonfile auslesen Java Basics - Anfänger-Themen 15
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
L Zeichen an bestimmter Stelle auslesen Java Basics - Anfänger-Themen 4
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
J Json Datei auslesen Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
S Tastatureingabe auslesen und in Konsole ausgeben Java Basics - Anfänger-Themen 6
S CSV Datei auslesen und anders darstellen Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N JTable auslesen Java Basics - Anfänger-Themen 6
N Java CSV Datei auslesen Java Basics - Anfänger-Themen 6
F Webseiten Quelltext auslesen Java Basics - Anfänger-Themen 5
J Datei auslesen (nur bestimmte Stellen) Java Basics - Anfänger-Themen 2
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
S Aus einer .bz2 Datei auslesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D XML von Seite auslesen Jsoup Java Basics - Anfänger-Themen 2
I Druckerauflösung auslesen - mittlerweile möglich? Java Basics - Anfänger-Themen 4
B WSDL auslesen? Java Basics - Anfänger-Themen 8
D Methoden Textdokument erstellen und auslesen. Java Basics - Anfänger-Themen 46
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
S Datein auslesen und verarbeiten Java Basics - Anfänger-Themen 1
J Geld speichern und wieder auslesen Java Basics - Anfänger-Themen 10
S CSV auslesen UTF-8 Problem Java Basics - Anfänger-Themen 7
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
K String buchstaben auslesen Java Basics - Anfänger-Themen 9
S Amazon Produktbeschreibung auslesen und nach Keywords suchen Java Basics - Anfänger-Themen 2
x-tshainge Interface Wie kann ich aus Textfeldern auslesen Java Basics - Anfänger-Themen 6
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
T Website auslesen Java Basics - Anfänger-Themen 2
T String auslesen bzw. überprüfen Java Basics - Anfänger-Themen 1
L CSV Auslesen Java Basics - Anfänger-Themen 5
B Auslesen von PDF / Bilder Java Basics - Anfänger-Themen 5
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben