Witam,
mam problem z dodaniem rekordu do bazy danych za pomocą hibernate i potrzebuję, żeby mi ktoś to wytłumaczył, jak powinno się to robić fachowo. Mam w związku z tym kilka pytań, które są na dole postu. Z góry dziękuję za każdą pomoc.
Na chwilę obecną mam coś takiego:
Plik konfiguracyjny hibernate
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property>
<property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver</property>
<property name="hibernate.connection.url">jdbc:derby://localhost:1527/Private</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">tym</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
<mapping resource="pl/models/UserTable.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Wygenerowałem też HibernateUtil i Revenge Engeenering, ale nie były zmieniane, więc ich tu nie wrzucam.
usertable.hbn
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Jan 2, 2013 9:14:39 PM by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="pl.models.UserTable" table="USER_TABLE" schema="ROOT">
<id name="userId" type="long">
<column name="USER_ID" />
<generator class="assigned" />
</id>
<property name="userLogin" type="string">
<column name="USER_LOGIN" length="12" />
</property>
<property name="userPassword" type="string">
<column name="USER_PASSWORD" length="12" />
</property>
<property name="userName" type="string">
<column name="USER_NAME" length="12" />
</property>
<property name="userMail" type="string">
<column name="USER_MAIL" length="30" />
</property>
<property name="userDate" type="date">
<column name="USER_DATE" length="10" />
</property>
</class>
</hibernate-mapping>
oraz usertable.java. Moje pliki modelowe na podstawie istniejącej tabeli w bazie derby
package pl.models;
// Generated Jan 2, 2013 9:14:38 PM by Hibernate Tools 3.2.1.GA
import java.util.Date;
/**
* UserTable generated by hbm2java
*/
public class UserTable implements java.io.Serializable {
private long userId;
private String userLogin;
private String userPassword;
private String userName;
private String userMail;
private Date userDate;
public UserTable() {
}
public UserTable(long userId) {
this.userId = userId;
}
public UserTable(long userId, String userLogin, String userPassword, String userName, String userMail, Date userDate) {
this.userId = userId;
this.userLogin = userLogin;
this.userPassword = userPassword;
this.userName = userName;
this.userMail = userMail;
this.userDate = userDate;
}
public long getUserId() {
return this.userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public String getUserLogin() {
return this.userLogin;
}
public void setUserLogin(String userLogin) {
this.userLogin = userLogin;
}
public String getUserPassword() {
return this.userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserMail() {
return this.userMail;
}
public void setUserMail(String userMail) {
this.userMail = userMail;
}
public Date getUserDate() {
return this.userDate;
}
public void setUserDate(Date userDate) {
this.userDate = userDate;
}
}
Na koniec plik zawierający kod formularza, z którego dane mają być wrzucone do bazy
<h:form>
<p><h:inputText label="#{msg.login_form1}" id="login" required="true" styleClass="inputText" value="#{userRegistering.login}">
<f:validateLength minimum="3" maximum="12"/>
</h:inputText>
<h:outputText value="#{msg.login_form1}" /></p>
<p><h:message for="login" style="color:#800000;font-size:10px;" /></p>
<p><h:inputSecret binding="#{passwordComponent}" label="#{msg.login_form2}" id="pass" required="true" styleClass="inputText" value="#{userRegistering.password}">
<f:validateLength minimum="3" maximum="12"/>
</h:inputSecret>
<h:outputText value="#{msg.login_form2}" /></p>
<p><h:message for="pass" style="color:#800000;font-size:10px;" /></p>
<p><h:inputSecret label="#{msg.login_form3}" id="pass2" required="#{not empty passwordComponent.value}" styleClass="inputText" value="#{userRegistering.repassword}">
<f:validator validatorId="pl.validatorsPasswordValidator" />
<f:attribute name="passwordComponent" value="#{passwordComponent}" />
</h:inputSecret>
<h:outputText value="#{msg.login_form3}" /></p>
<p><h:message for="pass2" style="color:#800000;font-size:10px;" /></p>
<p><h:inputText label="#{msg.login_form4}" id="imie" required="true" styleClass="inputText" value="#{userRegistering.name}">
<f:validateLength minimum="3" maximum="12"/>
</h:inputText>
<h:outputText value="#{msg.login_form4}" /></p>
<p><h:message for="imie" style="color:#800000;font-size:10px;" /></p>
<p><h:inputText label="#{msg.login_form5}" id="mail" required="true" styleClass="inputText" value="#{userRegistering.mail}">
<f:validateLength minimum="4" maximum="30"/>
<f:validator validatorId="pl.validators.MailValidator" />
</h:inputText>
<h:outputText value="#{msg.login_form5}" /></p>
<p><h:message for="mail" style="color:#800000;font-size:10px;" /></p>
<p>» <h:commandLink value="#{msg.register_button}" action="#{userRegistering.addUserToDB}"/></p>
</h:form>
Oraz ziarno do obsługi tego formularza
@ManagedBean
@RequestScoped
public class UserRegistering implements Serializable {
private String login;
private String password;
private String repassword;
UserHelper uh = null;
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
private String name;
private String mail;
public UserRegistering() {
}
public UserRegistering(String login, String password, String name, String mail, Date create) {
this.login = login;
this.password = password;
this.name = name;
this.mail = mail;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
**Pytania: **
- W którym pliku, miejscu, stworzyć metody odpowiedzialne za dodawanie i pobieranie rekordów z tej tabeli?
- Jak zrobić, żeby kolumna user_id i user_create (data) uzupełniały się same w odpowiednie wartości, przy dodawaniu rekordów? To znaczy, żeby w pole data wskakiwała aktualna data, a w polę user_id identyfikator o jeden większy, niż w przypadku poprzedniego usera
- Jak powinna wyglądać przykładowa metoda do **dodania **rekordu do bazy?