Kryptaesthesie
Erfahrenes Mitglied
Guten Abend
Ich hoffe, ich bekomme mein Problem ausreichend gut geschildert und vergesse beim Kürzen aufs Wesentliche keine Details!
Wie der Titel schon sagt, geht es um Hibernate und ich bin absoluter Neuling im Hibernate-Umfeld.
Folgende Situation:
Eine Tabelle mit Usern, eine Tabelle mit Rollen und eine Zwischentabelle, die aber noch weitere Attribute hat).
Für den User und die Rollen habe ich DAO-Klassen (get(), create(), etc.) erstellt.
Da kommen wir zu meiner ersten Frage:
brauche ich für die Zwischentabelle auch eine DAO-Klasse?
Ich würde jetzt erwarten, dass ich keine brauche, sondern dem User-Objekt eine Rolle hinzufügen kann (denn es können ja auch mehrere sein) und dann UserDAO.update(userobj) machen kann.
Wenn ich Hibernate die Datenbanktabellen anlegen lasse, dann sehen diese so aus, wie ich mir das gedacht habe.
Das Anlegen von Usern und Rollen via DAO-Klassen funktioniert auch.
Lediglich die Zwischentabelle, sprich die Beziehung zwischen User und Rolle bekomme ich nicht abgespeichert.
Ich poste hier mal noch den Code und hoffe, ihr könnt mir sagen, wie ich die Zwischentabelle gefüllt bekomme - mit oder ohne eigener DAO-Klasse.
Nachfolgend der Code dieser Dateien:
Vielen Dank euch schon mal!!
Und es tut mir wirklich leid, dass ich euch hier son Batzen vorklatsche!!
Gruß
der Gerrit
User.hbm.xml
UserRoles.hbm.xml
User.java
UserRole.java
UserRoles.java
Ich hoffe, ich bekomme mein Problem ausreichend gut geschildert und vergesse beim Kürzen aufs Wesentliche keine Details!
Wie der Titel schon sagt, geht es um Hibernate und ich bin absoluter Neuling im Hibernate-Umfeld.
Folgende Situation:
Eine Tabelle mit Usern, eine Tabelle mit Rollen und eine Zwischentabelle, die aber noch weitere Attribute hat).
Für den User und die Rollen habe ich DAO-Klassen (get(), create(), etc.) erstellt.
Da kommen wir zu meiner ersten Frage:
brauche ich für die Zwischentabelle auch eine DAO-Klasse?
Ich würde jetzt erwarten, dass ich keine brauche, sondern dem User-Objekt eine Rolle hinzufügen kann (denn es können ja auch mehrere sein) und dann UserDAO.update(userobj) machen kann.
Wenn ich Hibernate die Datenbanktabellen anlegen lasse, dann sehen diese so aus, wie ich mir das gedacht habe.
Das Anlegen von Usern und Rollen via DAO-Klassen funktioniert auch.
Lediglich die Zwischentabelle, sprich die Beziehung zwischen User und Rolle bekomme ich nicht abgespeichert.
Ich poste hier mal noch den Code und hoffe, ihr könnt mir sagen, wie ich die Zwischentabelle gefüllt bekomme - mit oder ohne eigener DAO-Klasse.
Nachfolgend der Code dieser Dateien:
- User.hbm.xml
- UserRoles.hbm.xml
- User.java
- UserRole.java (bildet die Zwischentabelle ab!)
- UserRoles.java
Vielen Dank euch schon mal!!
Und es tut mir wirklich leid, dass ich euch hier son Batzen vorklatsche!!
Gruß
der Gerrit
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>
<class name="com.qwertz.obj.db.User" table="USERS">
<id name="id" column="USER_ID">
<generator class="native"/>
</id>
<property unique="true" name="username"/>
<property name="password"/>
<property name="forename"/>
<property name="surname"/>
<property name="plz"/>
<property unique="true" name="email"/>
<property name="created"/>
<property name="lastMail"/>
<set name="friends" table="FRIEND">
<key column="userID1"/>
<one-to-many class="com.qwertz.obj.db.Friend"/>
</set>
<set name="contact" table="USER_CONTACT">
<key column="userID"/>
<one-to-many class="com.qwertz.obj.db.UserContact"/>
</set>
<set name="interestedBands" table="INTERESTED_BANDS">
<key column="userID"/>
<one-to-many class="com.qwertz.obj.db.InterestedIn"/>
</set>
<set name="roles" table="USER_ROLE">
<key column="userID"/>
<one-to-many class="com.qwertz.obj.db.UserRole"/>
</set>
<set name="concerts" table="VISITS">
<key column="userID"/>
<one-to-many class="com.qwertz.obj.db.Visit"/>
</set>
<set name="bands" table="BAND_ACL">
<key column="userID"/>
<one-to-many class="com.qwertz.obj.db.BandACL"/>
</set>
</class>
</hibernate-mapping>
UserRoles.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>
<class name="com.qwertz.obj.db.UserRoles" table="USER_ROLES">
<id name="id" column="ROLE_ID">
<generator class="native"/>
</id>
<property name="comment"/>
<property name="created"/>
<property name="role"/>
</class>
</hibernate-mapping>
User.java
Code:
package com.qwertz.obj.db;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Set;
public class User {
private int id;
private String username;
private String password;
private String forename;
private String surname;
private String email;
private String plz;
private long created;
private long lastMail;
private Set<User> friends = new HashSet<User>();
private Set<UserContact> contact = new HashSet<UserContact>();
private Set<InterestedIn> interestedBands = new HashSet<InterestedIn>();
private Set<UserRole> roles = new HashSet<UserRole>();
private Set<Visit> concerts = new HashSet<Visit>();
private Set<BandACL> bands = new HashSet<BandACL>();
public User() {
}
public User(String username, String password, String email) {
setUsername(username);
setPassword(password);
setEmail(email);
setCreated(Calendar.getInstance().getTimeInMillis());
setLastMail(-1); // Defaul-Wert setzen
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getForename() {
return forename;
}
public void setForename(String forename) {
this.forename = forename;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getPlz() {
return plz;
}
public void setPlz(String plz) {
this.plz = plz;
}
public long getCreated() {
return created;
}
public void setCreated(long created) {
this.created = created;
}
public Set<User> getFriends() {
return friends;
}
public void setFriends(Set<User> friends) {
this.friends = friends;
}
public Set<UserContact> getContact() {
return contact;
}
public void setContact(Set<UserContact> contact) {
this.contact = contact;
}
public Set<InterestedIn> getInterestedBands() {
return interestedBands;
}
public void setInterestedBands(Set<InterestedIn> interestedBands) {
this.interestedBands = interestedBands;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Set<UserRole> getRoles() {
return roles;
}
public void setRoles(Set<UserRole> roles) {
this.roles = roles;
}
public void addRole(int roleID) {
UserRole ur = new UserRole();
ur.setUserID(this.id);
ur.setRoleID(roleID);
this.roles.add(ur);
}
public Set<Visit> getConcerts() {
return concerts;
}
public void setConcerts(Set<Visit> concerts) {
this.concerts = concerts;
}
public long getLastMail() {
return lastMail;
}
public void setLastMail(long lastMail) {
this.lastMail = lastMail;
}
public Set<BandACL> getBands() {
return bands;
}
public void setBands(Set<BandACL> bands) {
this.bands = bands;
}
}
UserRole.java
Code:
package com.qwertz.obj.db;
import java.io.Serializable;
import java.util.Calendar;
public class UserRole implements Serializable{
private static final long serialVersionUID = 1L;
private int userID;
private int roleID;
private long created;
public UserRole() {
setCreated(Calendar.getInstance().getTimeInMillis());
}
public UserRole(int userID, int roleID) {
setUserID(userID);
setRoleID(roleID);
setCreated(Calendar.getInstance().getTimeInMillis());
}
public int getUserID() {
return userID;
}
public void setUserID(int userID) {
this.userID = userID;
}
public int getRoleID() {
return roleID;
}
public void setRoleID(int roleID) {
this.roleID = roleID;
}
public long getCreated() {
return created;
}
public void setCreated(long created) {
this.created = created;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (created ^ (created >>> 32));
result = prime * result + roleID;
result = prime * result + userID;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UserRole other = (UserRole) obj;
if (created != other.created)
return false;
if (roleID != other.roleID)
return false;
if (userID != other.userID)
return false;
return true;
}
}
UserRoles.java
Code:
package com.qwertz.obj.db;
import java.util.*;
public class UserRoles {
public static final UserRoles ROLE_USER = new UserRoles(10, "normaler User");
private int id;
private String role;
private String comment;
private long created;
private Set<User> users = new HashSet<User>();
public UserRoles() {
}
public UserRoles(String role, String comment) {
setRole(role);
setComment(comment);
setCreated(Calendar.getInstance().getTimeInMillis());
}
private UserRoles(int id, String comment) {
setId(id);
setComment(comment);
setCreated(Calendar.getInstance().getTimeInMillis());
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public long getCreated() {
return created;
}
public void setCreated(long created) {
this.created = created;
}
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
public void addUser2ListOfUsersWithThisRole(User user) {
this.users.add(user);
}
}