Tservarius
Mitglied
ein großes danke!
freue mich schon drauf endlich die logik dazu zu verstehen
ein schönes WE schonmal !
freue mich schon drauf endlich die logik dazu zu verstehen
ein schönes WE schonmal !
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
import junit.framework.TestCase;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import de.tutorials.hibernate.model.User;
public class TestKlasse extends TestCase {
private User user = new User();
private User chef = new User();
private SessionFactory sessionFactory;
long idUser, idChef;
protected void setUp() throws Exception {
super.setUp();
Configuration configuration = new Configuration().configure();
configuration.setProperty("hibernate.show_sql", "true");
SchemaExport export = new SchemaExport(configuration);
export.create(false, true);
sessionFactory = configuration.buildSessionFactory();
Session session = null;
Transaction transaction = null;
try {
session = sessionFactory.openSession();
transaction = session.beginTransaction();
chef.setNachname("Boss");
chef.setVorname("Der");
session.save(chef);
user.setNachname("Müller");
user.setVorname("Michael");
session.save(user);
chef.add(user);
session.update(chef);
user.setVorgesetzter(chef);
session.update(user);
transaction.commit();
} catch (HibernateException e) {
if (transaction != null) {
transaction.rollback();
throw e;
}
} finally {
if (session != null) {
session.close();
}
}
idUser = user.getId();
idChef = chef.getId();
}
public void testLoad() {
Session session = null;
try {
session = sessionFactory.openSession();
User user = (User) session.load(User.class, idUser);
User chef = (User) session.load(User.class, idChef);
assertEquals("Müller", user.getNachname());
assertEquals("Michael", user.getVorname());
User vorg = user.getVorgesetzter();
assertEquals(this.chef.getVorname(), vorg.getVorname());
assertEquals(this.chef.getNachname(), vorg.getNachname());
assertEquals(this.chef.getId(), vorg.getId());
assertEquals("Boss", chef.getNachname());
assertEquals("Der", chef.getVorname());
User unterg = chef.getUntergebene().get(0);
assertEquals(this.user.getNachname(), unterg.getNachname());
assertEquals(this.user.getVorname(), unterg.getVorname());
assertEquals(this.user.getId(), unterg.getId());
} finally {
if (session != null && session.isConnected()) {
session.close();
}
}
}
}
package de.tutorials.hibernate.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class User implements Serializable{
private static final long serialVersionUID = 8608688581595289547L;
private long id;
private String vorname = null;
private String nachname = null;
private User vorgesetzter = null;
private List<User> untergebene = new ArrayList<User>();
public String getNachname() {
return nachname;
}
public void setNachname(String nachname) {
this.nachname = nachname;
}
public List<User> getUntergebene() {
return untergebene;
}
public void setUntergebene(List<User> untergebene) {
this.untergebene = untergebene;
}
public User getVorgesetzter() {
return vorgesetzter;
}
public void setVorgesetzter(User vorgesetzter) {
this.vorgesetzter = vorgesetzter;
}
public String getVorname() {
return vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
public long getId() {
return id;
}
@SuppressWarnings("unused")
private void setId(long id) {
this.id = id;
}
public boolean add(User o) {
return untergebene.add(o);
}
public boolean remove(User o) {
return untergebene.remove(o);
}
}
<?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.hibernate.model">
<class name="User">
<id name="id">
<generator class="native" />
</id>
<property name="nachname" />
<property name="vorname" />
<many-to-one name="vorgesetzter" column="boss" />
<bag name="untergebene" inverse="true">
<key column="boss" />
<one-to-many class="User" />
</bag>
</class>
</hibernate-mapping>
chef.add(user);
...
user.setVorgesetzter(chef);
Tservarius hat gesagt.:kann dieses doppelt setzen irgendwie vermieten werden, sprich: kann ich nicht lediglich user.setVorgesetzer(chef) auf basis der users ausführen und die
abfrage untergebenen von einem chef irgendwie über hibernate leisten, ohne dass ich explizit die user als untergebenen hinzufügen muss?
<bag name="untergebene" inverse="true">
<key column="vorgesetzter" />
<one-to-many class="User" />
</bag>
-- Tabellenstruktur für Tabelle `user`
--
CREATE TABLE `user` (
`userid` int(11) NOT NULL auto_increment,
`vorname` varchar(255) collate latin1_general_ci default NULL,
`nachname` varchar(255) collate latin1_general_ci default NULL,
`vorgesetzter` int(11) default NULL,
PRIMARY KEY (`userid`),
KEY `FK36EBCBD3F17A9B` (`vorgesetzter`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ;
--
-- Daten für Tabelle `user`
--
INSERT INTO `user` VALUES (1, 'Manfred', 'Mustermann', 3);
INSERT INTO `user` VALUES (2, 'Erika', 'Mustermann', 3);
INSERT INTO `user` VALUES (3, 'Big', 'Chef', NULL);
List daten = mgr.listUsers();
Iterator it = daten.iterator();
while (it.hasNext()) {
try {
User userobj = (User) it.next();
System.out.println("USER: (" + userobj.getUserid() + ") " + userobj.getVorname() + ' ' + userobj.getNachname());
System.out.println("Vorgesetzer: " + userobj.getVorgesetzter().getVorname() + " " + userobj.getVorgesetzter().getNachname());
System.out.println("Untergebene:" + userobj.getUntergebene().get(0).getVorname() + " " + userobj.getUntergebene().get(0).getNachname());
System.out.println("\n");
} catch (Exception e) {
System.out.println(e.toString());
}
}
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: eu.xyz.User.untergebene, no session or session was closed
<class name="User" lazy="false">