Hibernate: many-to-many funktioniert noch nicht ganz

Status
Nicht offen für weitere Antworten.

rapthor

Bekanntes Mitglied
Hallo,

ich habe eine Tabelle "Users" und "Groups", sowie "UserGroups", um Benutzer einer oder mehreren Gruppen zuzuordnen.

Für alle 3 Tabellen habe ich Java-Objekte mit gettern und settern erstellt. "User" und "Group" enthalten jeweils zusätzlich zu ihren Standardattributen wie Name, Beschreibung noch jeweils getter und setter für ein "Set" aus "Group"s bzw. "User"s.

Sobald ich jedoch noch einen Benutzer einer Gruppe zuordnen möchte, fügt Hibernate den Benutzer NICHT zur Gruppe hinzu, meckert aber auch nicht rum.

Kann mir wer helfen?

Ich wollte den Vorgang wie folgt bewerkstelligen:

Code:
	public void putUserIntoGroup()
	{
		Session session = SessionFactoryUtils.getSession(sessionFactory, true);
		TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session));		
				
		
		IUserDAO userDAO = (IUserDAO)beanFactory.getBean("userDAO");
		User theUser= userDAO.getById(1);
		
		IGroupDAO groupDAO = (IGroupDAO)beanFactory.getBean("groupDAO");
		Group theGroup= groupDAO.getById(4);
		
                                // ist das notwendiug??
                                // würde ich damit nicht alle einträge
                                // zwischen dem benutzer und seinen
                                // gruppen löschen?
		// thisone.setSubscribed_groups(new HashSet<Group>());
		thisone.getSubscribed_groups().add(theGroup);
		
                                // ... hier die gleiche frage
		//thisgroup.setParticipating_users(new HashSet<User>());
		thisgroup.getParticipating_users().add(theUser);
		
                                // hier sollte hibernate den aktualisierten
                                // benutzer speichern (und die datenbank aktualisieren)
                                // aber leider hat diese Zeile KEINE WIRKUNG !!
                                // die Methode "save" macht das: getHibernateTemplate().saveOrUpdate(user);		                userDAO.save(theUser);

                                // aufgrund von "cascade=all" nicht notwendig ??
		//groupDAO.save(theGroup);
		
		TransactionSynchronizationManager.unbindResource(sessionFactory);
		SessionFactoryUtils.releaseSession(session, sessionFactory);		
	}



Es folgen alle relevanten Mapping-Dateien und Java-Klassen-Codes:

User.hbm.xml:
Code:
<?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.tfhberlin.eclipsophone.server.beans" auto-import="true">
  <class name="User" table="Users">
    <id name="id" column="id" type="long" unsaved-value="0">
      <generator class="native"/>
    </id>
    <property name="name" column="name" type="string"/>
    <property name="password" column="password" type="string"/>
    <set name="subscribed_groups" outer-join="true" table="UserGroups" cascade="all">
    	<key column="user_ID"/>
		<many-to-many class="Group" column="group_ID"/>
    </set>
  </class>  
    
</hibernate-mapping>

Group.hbm.xml:
Code:
<?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.tfhberlin.eclipsophone.server.beans" auto-import="true">
  <class name="Group" table="Groups">
    <id name="id" column="id" type="long" unsaved-value="0">
      <generator class="native"/>
    </id>
    <property name="name" column="name" type="string"/>
    <property name="description" column="description" type="string"/>
	<set name="participating_users" outer-join="true" inverse="true" table="UserGroups">
    	<key column="group_ID"/>
    	<many-to-many class="User" column="user_ID"/>
	</set>    
  </class>
</hibernate-mapping>

UserGroup.hbm.xml:
Code:
<?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.tfhberlin.eclipsophone.server.beans" auto-import="true">
  <class name="UserGroup" table="UserGroups">
    <id name="id" column="id" type="long" unsaved-value="0">
      <generator class="native"/>
    </id>
    <property name="user_ID" column="user_ID" type="long"/>
    <property name="group_ID" column="group_ID" type="long"/>
  </class>
</hibernate-mapping>

Es folgen die Klassen dazu:

User.java:
Code:
package de.tfhberlin.eclipsophone.server.beans;

import java.util.Iterator;
import java.util.Set;

public class User
{
	private String name;
	private String password;
	private long id;	
	private Set<Group> subscribed_groups;
	
	public User()
	{
		
	}

	public long getId()
	{
		return id;
	}

	public void setId(long id)
	{
		this.id = id;
	}	
	
	public String getName()
	{
		return name;
	}	
	
	public void setName(String name)
	{	
		this.name = name;
	}
	
	public String getPassword()
	{
		return password;
	}
	
	public void setPassword(String password)
	{
		this.password = password;
	}

	public Set<Group> getSubscribed_groups() {
		return subscribed_groups;
	}

	public void setSubscribed_groups(Set<Group> subscribed_groups) {
		this.subscribed_groups = subscribed_groups;
	}
	
	public String toString()
	{
		StringBuffer sb = new StringBuffer();
		sb.append("User {id=" + id + ", name=" + name + ", groups={");
		
		for (Iterator<Group> i = subscribed_groups.iterator(); i.hasNext(); )
			sb.append("(" + i.next() + "), ");
		
		if (subscribed_groups.size() > 0)		
			sb.delete(sb.length()-2, sb.length());
		
		sb.append("}}");
		
		return sb.toString();
	}
}

Group.java:
Code:
package de.tfhberlin.eclipsophone.server.beans;

import java.util.Set;

public class Group
{
	private long id;
	private String name;
	private String description;
	private Set<User> participating_users;
	
	public Group()
	{
		
	}
	
	public long getId()
	{
		return id;
	}

	public void setId(long id)
	{
		this.id = id;
	}
	
	public String getName()
	{
		return name;
	}
	
	public void setName(String name)
	{	
		this.name = name;
	}
	
	public String getDescription()
	{
		return description;
	}
	
	public void setDescription(String description)
	{
		this.description = description;
	}
	
	public Set<User> getParticipating_users() {
		return participating_users;
	}

	public void setParticipating_users(Set<User> participating_users) {
		this.participating_users = participating_users;
	}	
	
	public String toString()
	{
		return "Group {id=" + id + ", name=" + name + ", description=" + description + "}";
	}	
}

UserGroup.java:
Code:
package de.tfhberlin.eclipsophone.server.beans;

public class UserGroup
{
	private long user_ID;
	private long group_ID;
	private long id;
	
	public UserGroup()
	{
		
	}
	
	public long getId()
	{
		return id;
	}

	public void setId(long id)
	{
		this.id = id;
	}	
	
	public long getUser_ID()
	{
		return user_ID;
	}
	
	public void setUser_ID(long user_ID)
	{	
		this.user_ID = user_ID;
	}
	
	public long getGroup_ID()
	{
		return group_ID;
	}
	
	public void setGroup_ID(long group_ID)
	{
		this.group_ID = group_ID;
	}
	
	public String toString()
	{
		return "UserGroup {id=" + id + ", userid=" + user_ID + ", groupid=" + group_ID + "}";
	}	
}
 

rapthor

Bekanntes Mitglied
Mein Problem hing mit der Verwendung der SessionFactory zusammen. Änderungen der "UserGroups" wurden aus irgendeinem Grund nicht übernommen. Aber mit der korrekten Initialisierung einer Transaktion funktionierte es schließlich.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Java EE 6, eclipse, maven, jsf, hibernate, mysql Allgemeines EE 8
O Hibernate Fehlermeldung bei start des Servers Allgemeines EE 2
E Frage zu Wildfly und Hibernate OGM Allgemeines EE 0
S Frage zu Jersey + Hibernate Allgemeines EE 1
D GWT mit Hibernate und Sql Datenbank Allgemeines EE 2
B Wicket, Hibernate, H2 memDB Anfänger Frage Allgemeines EE 2
H Hibernate - OneToMany - mappedBy reference an unknown target entity property Allgemeines EE 1
A Hibernate endlich zu Laufen bekommen... Allgemeines EE 11
A Erste Schritte... Problem mit Hibernate Allgemeines EE 15
LadyMilka Ablaufdiagramm mit/ohne Hibernate Allgemeines EE 2
P Mit JAXB erzeugte Klassen persistieren (Hibernate) Allgemeines EE 10
K Anfänger: Hibernate + Web Allgemeines EE 2
T Hibernate 3 + EJB 3 + JBoss 5 Allgemeines EE 6
G Persistenz mit Hibernate oder J2EE? Allgemeines EE 11
C Hibernate - Expression.or Allgemeines EE 4
D Erst Spring oder erst Hibernate lernen? Allgemeines EE 2
D Java EE vs. Spring/Hibernate Allgemeines EE 26
Y myFaces und Hibernate Session Handling Allgemeines EE 7
W Speicher-Problem bei WebApp unter Tomcat, Struts, Hibernate Allgemeines EE 3
byte Remote Lazy Loading mit Spring und Hibernate Allgemeines EE 5
G JSF, Hibernate, Spring --> Struktur Allgemeines EE 2
F [Hallo] Frage zu Hibernate Mapping und Vererbung Allgemeines EE 3
G JSF | Hibernate | MySQL Allgemeines EE 17
G Hibernate: org.hibernate.TransactionException Allgemeines EE 4
F org.hibernate.LazyInitializationException: failed to lazily Allgemeines EE 8
J nur bestimmte Mapping-Dateien berücksichtigen (Hibernate) Allgemeines EE 14
S Hibernate EJB3 Allgemeines EE 2
E JBoss Hibernate Datenbank-Timeout Allgemeines EE 3
S Hibernate, Tomcat und Eclipse treiben mich zum Wahnsinn. Allgemeines EE 2
2 hibernate - createQuery() Allgemeines EE 9
T Hibernate die richtige Wahl? Allgemeines EE 2
M JSF mit Hibernate Allgemeines EE 14
W Hibernate *.Jar's im Klassenpfad Allgemeines EE 10
M Tomcat, Hibernate, MySQL und die EOFException Allgemeines EE 7
C EntityManager wirft NullpointerException: JBoss-Hibernate Allgemeines EE 4
E JSF, Hibernate & MySQL: Keine Datenbankaktualisierung Allgemeines EE 5
M mit Hibernate 1:n in view richtige implementieren Allgemeines EE 3
M Hibernate Criteria frage Allgemeines EE 2
A Speicherproblem bei Webanwendung mit Hibernate und Stuts Allgemeines EE 6
A Hibernate-Problem mit MySQL-Cluster Allgemeines EE 6
S Fragen zu: Servlets, Struts & Hibernate Allgemeines EE 9
E JOINS und Hibernate? Allgemeines EE 3
S Hibernate Mapping Problem Allgemeines EE 3
S Hibernate INSERT Problem Allgemeines EE 11
S Java Enum in MySQL und Hibernate Allgemeines EE 3
D Hibernate hql suche Date Allgemeines EE 9
B JSF + Hibernate How2 Allgemeines EE 2
G [JSF+Hibernate]: DB-Constraints in Validierungsphase? Allgemeines EE 4
P struts Hibernate MySQL Select Statement Allgemeines EE 24
G JTA ja/nein & wie (JBoss & Hibernate & Transakti Allgemeines EE 3
T Hibernate & Logging in Log4J Allgemeines EE 4
T JSTL + Struts (inkl.Hibernate) -> forEach Problem Allgemeines EE 6
G Persistenz-Entscheidung (Entity Beans, Hibernate, JDBC) Allgemeines EE 12
S Hibernate 2.x mit Eclipse 2.1 Allgemeines EE 16

Ähnliche Java Themen

Neue Themen


Oben