Hallo
ich habe folgendes Problem: Ich bin grade am schreiben einer JSF Anwendung, die ihre Datenbank-Anbindung an MySQL mittels Hibernate umsetzt. Hierbei geht es grade um das Registrieren neuer Nutzer im System. Ich erzeuge ein User-Object und speichere dieses über das DAO. Der Code wird ohne Fehler oder Warnungen ausgeführt, im log4j und MySQL-log werden die Befehle auch korrekt angezeigt, aber in der Datenbank befindet sich kein neuer Datensatz ^^
Hier die codes - jeweils stell ich nur die relevanten aspekte dar:
Das Datenbankmodell sieht wie folgt aus:
das prefix vorne zeigt den datentyp: int = integer(8), str = varchar(45), bol = tinyint(1), cnt = integer(8) autoincrement
Die JavaKlassen wie folgt (setters und getters hab ich hier mal weggelassen, sie existieren für alle attribute):
Das hibernate-mapping:
Analog zu Hibernate And MyFaces - MyFaces Wiki hab ich einen eigenen OpenSessionInViewFilter eingebunden.
Ich binde eine User-Bean an die Felder des Registrierungsforumlars (Converter für Company und Role existieren) und schreibe dieses Objekt über
im DAO in die Datenbank.
Der Code wird wunderbar ausgeführt, keine Exception wird geworfen, log4j listet keine Warnungen auf. Der <h:messages /> ist leer. Auch der Filter wird aufgerufen (mit nem system.out.println überprüft).
Leider ist der Datenbankbestand danach immernoch genau der selbe, wie davor
ich hab mal über hibernate.show_sql und log4j.logger.org.hibernate.type=debug die hibernate-sql anweisungen ausgeben lassen:
Die Spalten sind nullable, die Rollen #1 und #2 exitieren. MySQL ist nicht case-sensitive...
nun - ich hab auch das mysql.log da:
findet einer den Fehler? Ich verzweifle noch hier
Vielen Dank für eure Hilfe
ich habe folgendes Problem: Ich bin grade am schreiben einer JSF Anwendung, die ihre Datenbank-Anbindung an MySQL mittels Hibernate umsetzt. Hierbei geht es grade um das Registrieren neuer Nutzer im System. Ich erzeuge ein User-Object und speichere dieses über das DAO. Der Code wird ohne Fehler oder Warnungen ausgeführt, im log4j und MySQL-log werden die Befehle auch korrekt angezeigt, aber in der Datenbank befindet sich kein neuer Datensatz ^^
Hier die codes - jeweils stell ich nur die relevanten aspekte dar:
Das Datenbankmodell sieht wie folgt aus:
Code:
tbluser (
- [u]cntid[/u],
- strname,
- strfirstname,
- stremail,
- strlogin,
- strpass,
- intdeputy,
- intcompany,
- strsystemlanguage,
- bolenabled,
- stremailcertifiedpass)
tblcompany (
- [u]cntid[/u],
- strname)
tblrole (
- [u]cntid[/u],
- strname)
tbluser_role_request (
- [u]intuser[/u],
- [u]introle[/u])
das prefix vorne zeigt den datentyp: int = integer(8), str = varchar(45), bol = tinyint(1), cnt = integer(8) autoincrement
Die JavaKlassen wie folgt (setters und getters hab ich hier mal weggelassen, sie existieren für alle attribute):
Code:
class User{
private int id;
private String name;
private String firstName;
private String email;
private String login;
private String pass;
private User deputy;
private Company company;
private String systemLanguage;
private boolean enabled;
private emailCertifiedPass;
private List<Role> requestedRoles = new ArrayList<Role>();
}
class Company{
private int id;
private String name;
private List<User> employees = new ArrayList<User>();
}
class Role{
private int id;
private String name;
}
Das hibernate-mapping:
Code:
...
<class name="User" table="tbluser">
<id name="id" column="cntid"><generator class="native" /></id>
<property name="name" column="strname" />
<property name="firstName" column="strfirstname" />
<property name="email" column="stremail" />
<property name="login" column="strlogin" />
<property name="pass" column="strpass" />
<many-to-one name="deputy" column="intdeputy" class="User" />
<many-to-one name="company" column="intcompany" class="Company" />
<property name="systemLanguage" column="strsystemlanguage" />
<property name="enabled" column="bolenabled" />
<property name="emailCertifiedPass" column="strEmailCertifiedPass" />
<bag name="requestedRoles" tbl="tbluser_role_request" lazy="true" cascade="save-update">
<key column="intuser" />
<many-to-many class="Role" column="introle" />
</bag
</class>
<class name="Company" table="tblcompany">
<id name="id" column="cntid"><generator class="native" /></id>
<property name="name" column="strname" />
<bag name="employees" lazy="true" cascade="save-update">
<key column="intcompany" />
<one-to-many class="User" />
</bag>
</class>
<class name="Role" table="tblrole">
<id name="id" column="cntid"><generator class="native" /></id>
<property name="name" column="strname" />
</class>
...
Analog zu Hibernate And MyFaces - MyFaces Wiki hab ich einen eigenen OpenSessionInViewFilter eingebunden.
Ich binde eine User-Bean an die Felder des Registrierungsforumlars (Converter für Company und Role existieren) und schreibe dieses Objekt über
Code:
getHibernateTemplate().save(user);
Der Code wird wunderbar ausgeführt, keine Exception wird geworfen, log4j listet keine Warnungen auf. Der <h:messages /> ist leer. Auch der Filter wird aufgerufen (mit nem system.out.println überprüft).
Leider ist der Datenbankbestand danach immernoch genau der selbe, wie davor
ich hab mal über hibernate.show_sql und log4j.logger.org.hibernate.type=debug die hibernate-sql anweisungen ausgeben lassen:
Code:
Hibernate: insert into tblUser (
strName, strFirstName, strEmail, strLogin, strPass,
intDeputy, intCompany, strSystemLanguage, bolEnabled,
strEmailCertificatePass) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
DEBUG [http-8080-1] (NullableType.java:59) ?? binding 'MYLASTNAME' to parameter: 1
DEBUG [http-8080-1] (NullableType.java:59) ?? binding 'MYFIRSTNAME' to parameter: 2
DEBUG [http-8080-1] (NullableType.java:59) ?? binding 'MYEMAIL' to parameter: 3
DEBUG [http-8080-1] (NullableType.java:59) ?? binding 'MYLOGIN' to parameter: 4
DEBUG [http-8080-1] (NullableType.java:59) ?? binding 'MYPASS' to parameter: 5
DEBUG [http-8080-1] (NullableType.java:52) ?? binding null to parameter: 6
DEBUG [http-8080-1] (NullableType.java:59) ?? binding '1' to parameter: 7
DEBUG [http-8080-1] (NullableType.java:59) ?? binding 'de' to parameter: 8
DEBUG [http-8080-1] (NullableType.java:59) ?? binding 'false' to parameter: 9
DEBUG [http-8080-1] (NullableType.java:59) ?? binding null to parameter: 10
Hibernate: insert into tblUser_Role_Request (intUser, intRole) values (?, ?)
DEBUG [http-8080-1] (NullableType.java:59) ?? binding '2' to parameter: 1
DEBUG [http-8080-1] (NullableType.java:59) ?? binding '1' to parameter: 2
Hibernate: insert into tblUser_Role_Request (intUser, intRole) values (?, ?)
DEBUG [http-8080-1] (NullableType.java:59) ?? binding '2' to parameter: 1
DEBUG [http-8080-1] (NullableType.java:59) ?? binding '2' to parameter: 2
Die Spalten sind nullable, die Rollen #1 und #2 exitieren. MySQL ist nicht case-sensitive...
nun - ich hab auch das mysql.log da:
Code:
4 Prepare [8] insert into tblUser (
strName, strFirstName, strEmail, strLogin, strPass,
intDeputy, intCompany, strSystemLanguage, bolEnabled,
strEmailCertificatePass) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
4 Execute [8] insert into tblUser (
strName, strFirstName, strEmail, strLogin, strPass,
intDeputy, intCompany, strSystemLanguage, bolEnabled,
strEmailCertificatePass) values
('MYLASTNAME', 'MYFIRSTNAME', 'MYEMAIL', 'MYLOGIN', 'MYPASS', NULL, 1, 'de', 0, NULL)
7 Query SHOW GLOBAL STATUS
7 Query SHOW INNODB STATUS
4 Prepare [9] insert into tblUser_Role_Request (intUser, intRole) values (?, ?)
4 Execute [9] insert into tblUser_Role_Request (intUser, intRole) values (2, 1)
4 Execute [9] insert into tblUser_Role_Request (intUser, intRole) values (2, 2)
findet einer den Fehler? Ich verzweifle noch hier
Vielen Dank für eure Hilfe