Hibernate - Verständnisfragen

y0dA

Erfahrenes Mitglied
Hoi!

Darf mich ab heute mit Hibernate beschäftigen und hätte diesbezüglich ein paar Fragen:

+) Da ich Eclipse benutze habe ich mir klarerweise das Hibernate Plugin installiert und komme damit auch klar, jedoch sehe ich keine Möglichkeit wie aus meiner Datenbank mir ganz genau eine Tabelle liefern lassen kann (Stichwort: Hibernate Code Generation). Wenn ich hierbei unter "Exporters" angebe dass ich .hbm.xml und .java haben möchte dann bekomme ich alle Tabellen aus meiner Datenbank - Gibt es eine Möglichkeit dass ich dies auf eine Tabelle eingrenzen kann?

+) Kann man mit dem Eclipse Plugin auch aus hbm.xml Files .java generieren? Wie?

+) Brauche ich nun eigentlich eine "Datenbank Klasse" in welcher ich eine Connection aufbaue oder reicht die Bekanntgabe der Connection Url etc im cfg.xml?

+) Wie kann ich nun mit Hibernate in einer meiner Klassen ein Statement absetzen (wie?) bzw in welchen Klassen sollte man dies tun (Persistenzschicht ist ja nicht mehr?)?

mfg
 
Hallo,

da ich das Plugin nicht benutze kann ich dir leider da nicht weiterhelfen. Aber zu deiner letzten Frage kann ich dir was sagen.

Die Session stellt 2 Methoden zur Verfügung, createQuery() und createSQLQuery(). Bei createQuery muss ein Statement in HQL übergeben werden und bei createSQLQuery() ein Statement in SQL.
Ich persönlich würde schon eine Persistence-Schicht machen. So kann man nämlich die Schicht einfach austauschen. Angenommen du willst Hibernate nicht mehr nutzen und hast keine Persistence-Schicht, dann musst du alle Klassen ändern, in der du Hibernate nutzt. Anders tauschst du einfach nur diese Schicht aus.

MFG

zEriX
 
Hmm womit arbeitest du dann wenn du das Plugin nicht hast? Mit Ant? Gibt es noch eine Möglichkeit wie ich bspw. hbm.xml in .java generieren kann und umgekehrt?

Sprich wenn ich mir nun eine Klasse schreibe die meine Datenbank Tabelle darstellen soll, wie muss ich da vorgehen dass jene auch in der Datenbank erstellt wird?

Andersrum, wie kann ich mir ohne Ant mittels Hibernate die Datenbanktabelle als .java generieren lassen?

Fragen um Fragen :(
 
+) Da ich Eclipse benutze habe ich mir klarerweise das Hibernate Plugin installiert und komme damit auch klar, jedoch sehe ich keine Möglichkeit wie aus meiner Datenbank mir ganz genau eine Tabelle liefern lassen kann (Stichwort: Hibernate Code Generation). Wenn ich hierbei unter "Exporters" angebe dass ich .hbm.xml und .java haben möchte dann bekomme ich alle Tabellen aus meiner Datenbank - Gibt es eine Möglichkeit dass ich dies auf eine Tabelle eingrenzen kann?

also, hier bin ich mir nicht sicher, was du genau willst...
aber zum Ansehen deiner Datenbank oder der einzelnen Tabellen verwende ich den Database Explorer, wo ich eine Verbindung zu meiner DerbyDB herstelle, und dort kann ich dann die einzelen Tabellen begutachten / verändern

was hibernate code generation hiermit zu tun hat, versteh ich net ^^

+) Kann man mit dem Eclipse Plugin auch aus hbm.xml Files .java generieren? Wie?

du brauchst das package "Hibernate Extensions", hier ist für mich: "stichwort Hibernate Code Generation" :D

Link

+) Brauche ich nun eigentlich eine "Datenbank Klasse" in welcher ich eine Connection aufbaue oder reicht die Bekanntgabe der Connection Url etc im cfg.xml?

das nimmt dir natürlich hibernate ab, man benötigt keinen eigenen Data Access Layer mehr, in der Konfig wird das eingetragen und hibernate erledigt den rest (*.cfg.xml)

+) Wie kann ich nun mit Hibernate in einer meiner Klassen ein Statement absetzen (wie?) bzw in welchen Klassen sollte man dies tun (Persistenzschicht ist ja nicht mehr?)?

hibernate erzeugt dir die statements zum einfügen/auslesen in die Datenbank. du verwendest die Klassen Session, Transaction und Query

sagen wir du hast eine Klasse Employee mit Name, Addresse
dafür muss es dann eine *.hbm.xml geben, die sagt wie in welcher Tabelle ein objekt der klasse employee in der datenbank abgespeichert wird

hier dann etwas code:

class HibernateUtil.java zur unterstützung (solltest dir selber schreiben)
Java:
private static SessionFactory sf = null; // singleton

public static SessionFactory getSessionFactory() {
  if (sf == null)
    sf = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
  return sf;
}

public static Session getCurrentSession() {
  return getSessionFactory().getCurrentSession();
}

diese hilfsklasse verkürzt den code auf dauer sehr und ist darum sehr zu empfehlen, und dann kannst du in deiner main oda in einer bel. methode ein objekt der klasse erzeugen und es in der DB speichern:

Java:
Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.beginTrancsaction();
session.save(empl); // speichern in DB
// oder eine liste der objekte aus tabelle holen
Query qry = session.createQuery("FROM employee"); // employee ist tabellen name in DB
List<Employee> emply = qry.list(); // dann liste durchiterieren, ausgeben etc
// oder ein objekt aus db laden und updaten
Employee empl = (Employee)session.get(Employee.class, employeeID);
if (empl != null)
  empl.setLastName(lastName);
else
  sysout("invalid id");
tx.commit // close transaction, close session, update/saves objects if needed
 
Zuletzt bearbeitet:
Hmm womit arbeitest du dann wenn du das Plugin nicht hast? Mit Ant? Gibt es noch eine Möglichkeit wie ich bspw. hbm.xml in .java generieren kann und umgekehrt?

Sprich wenn ich mir nun eine Klasse schreibe die meine Datenbank Tabelle darstellen soll, wie muss ich da vorgehen dass jene auch in der Datenbank erstellt wird?

Andersrum, wie kann ich mir ohne Ant mittels Hibernate die Datenbanktabelle als .java generieren lassen?

Fragen um Fragen :(

ich denke du würdest auch gut ohne dem plugin auskommen, ich verwende das auch nicht wirklich, auf jedenfall, warum willst du dir eine Tabelle in der datenbank erzeugen?

das erledigt hibernate für dich wenn du ihm in den konfigfiles sagst, er soll die klasse xyz so und so in der DB ablegen erzeugt er dir eine tabelle wo er dann xyz abspeichern kann

ich habe noch >>nie<< eine tabelle selbst erstellt, in welcher ich dann ein java objekt abgespeichert habe mittels hibernate, das wird automatisch erzeugt
 
Zuletzt bearbeitet:
also, hier bin ich mir nicht sicher, was du genau willst...
aber zum Ansehen deiner Datenbank oder der einzelnen Tabellen verwende ich den Database Explorer, wo ich eine Verbindung zu meiner DerbyDB herstelle, und dort kann ich dann die einzelen Tabellen begutachten / verändern

was hibernate code generation hiermit zu tun hat, versteh ich net

Primär geht es mir darum dass es in meiner Datenbank eine Tabelle gibt die ich einlesen möchte und somit benötige ich von dieser Tabelle ja eine .java. Dies kann ich auch mit dem Eclipse Plugin durchführen, jedoch weiß ich nicht wie ich dass nur für eine Tabelle anwenden kann.

du brauchst das package "Hibernate Extensions", hier ist für mich: "stichwort Hibernate Code Generation"
Also kann ich nur mittels Ant den Code generieren lassen?

ich denke du würdest auch gut ohne dem plugin auskommen, ich verwende das auch nicht wirklich, auf jedenfall, warum willst du dir eine Tabelle in der datenbank erzeugen?

das erledigt hibernate für dich wenn du ihm in den konfigfiles sagst, er soll die klasse xyz so und so in der DB ablegen erzeugt er dir eine tabelle wo er dann xyz abspeichern kann

Ich wollte einfach nur wissen wie ich das mit Hibernate realisieren kann (ist momentan jedoch nicht mein Problem - reine Verständnisfrage), also dass mir eine meiner Klassen als Tabelle in der Datenbank abgelegt wird. Welches Konfig-File meinst du?
 
Ich nutze gar kein Plugin. Das einzige was ich nutzen würde, wäre sowas wie die Mapping-Workbench bei TopLink. Da kann man die Mappings einstellen, also welches Object in welche Tabelle abgelegt wird, wie Tabellen miteinander verknütpft sind und das alles. Sowas in der Richtung hab ich leider noch nicht für Hibernate gefunden. Ok, hab aber auch noch nicht richtig danach gesucht. :)

MFG

zEriX
 
Du musst für jede Klasse eine mapping-xml-Datei anlegen. Dort wird festgelegt, wie ein Object in der Datenbank abgespeichert wird.

Peron.java
Java:
package de.tutorials.model;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Person {

	private long id = 0;
	private String name = "";
	private String vorname = "";
	
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return the vorname
	 */
	public String getVorname() {
		return vorname;
	}
	/**
	 * @param vorname the vorname to set
	 */
	public void setVorname(String vorname) {
		this.vorname = vorname;
	}
	/**
	 * @return the id
	 */
	public long getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	private void setId(long id) {
		this.id = id;
	}

}

Person.hbm.xml
XML:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


<hibernate-mapping package="de.tutorials.model">
	<class name="Person">
		<id name="id">
			<generator class="native" />
		</id>
		<property name="name" />
		<property name="vorname" />

	</class>
</hibernate-mapping>


MFG

zEriX
 
Zuletzt bearbeitet von einem Moderator:
Jo genau das wollte ich wissen und hierbei stellt sich bei mir eben die Frage ob diese Mapping Datei nicht irgendwie automatisiert erzeugt werden kann?
 
Ich wollte einfach nur wissen wie ich das mit Hibernate realisieren kann (ist momentan jedoch nicht mein Problem - reine Verständnisfrage), also dass mir eine meiner Klassen als Tabelle in der Datenbank abgelegt wird. Welches Konfig-File meinst du?

das klingt jetzt eventuell a bissl arg, aber vielleicht solltest du dich zuerst ausführlich mit der hibernate dokumentation beschäftigen, und dann wenn noch fragen offen sind können wir die klären.

ich meine, das ist so ziemlich das grundlegendste an hibernate.

du hast eine hibernate.cfg.xml die für die db-verbindung und generellen einstellungen zuständig ist
dann hast eine klasse, diese willst mit hibernate persistieren, darum brauchst du zu dieser klasse eine konfig-/mappingdatei

mithilfe dieser mapping datei erzeugt hibernate eine tabelle in der datenbank und weiß dann auch wie das objekt in der datenbank ablegt werden muss

ich empfehle gerade für den anfang, die hibernate dokumentation, natürlich ist das ganze sehr viel, aber jetzt im forum nochmal die ganze dok von dort reinschreiben, ist etwas überladen

just me 2 cents
mfg

===
edit die posts haben sich jetzt überschnitten, aber genau solche sachen wie eine Klasse + mapping file findet man eben ausführlich in der dokumentation
 
Zurück