Hibernate ist keine Aktualisierung der Datensatz - Wicket

Ich arbeite gerade an einer Webanwendung mit Wicket, Spring und Hibernate und ich habe ein problem mit der Aktualisierung von Datensätzen. Ich habe überprüft, dass die saveOrUpdate-Methode aufgerufen, und die Daten in das domain-Objekt geändert hat. Die SQL-Ausgabe enthält jedoch nicht die Anzeige, dass alle änderungen an der Datenbank vorgenommen wurde (UPDATE-in B.) und der betroffene Datensatz nicht aktualisiert wurde.

Ich würde denke es macht mehr Sinn, die Verwendung von update (), aber ich saveOrUpdate() gelingt, neue Datensätze zu erstellen, aber es nicht zu aktualisieren. Ich habe überprüft, dass diese Methode aufgerufen WIRD, und die UserVO übergeben wird, enthält die aktualisierten Felder. Hier ist die DAO-Methode:

public class SkuldwebDAOImpl extends HibernateDaoSupport implements SkuldwebDAO {
    public void updateUser(UserVO userVO) {
        getSession().saveOrUpdate(userVO);
    }
}

Hier ist meine property-Datei:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/skuldweb_dev;AUTO=MULTI;CURSOR=READONLY
jdbc.username=
jdbc.password=
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.use_outer_join=true
hibernate.cache.use_query_cache=true hibernate.cache.use_second_level_cache=true hibernate.cache.provider=org.hibernate.cache.HashtableCacheProvider
hibernate.schemaUpdate=true

Hier ist die sessionFactory bean in applicationContext.xml:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="use_outer_join">${hibernate.use_outer_join}</prop>
                <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>
                <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
                <prop key="hibernate.cache.provider_class">${hibernate.cache.provider}</prop>
                <prop key="hibernate.connection.pool_size">10</prop>
                <prop key="hibernate.connection.autocommit">true</prop>
                <prop key="hibernate.jdbc.batch_size">1000</prop>
                <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop>
            </props>
        </property>
        
        <property name="annotatedClasses">
            <list>
                <value>com.upbeat.app.skuldweb.domain.UserVO</value>
                <value>com.upbeat.app.skuldweb.domain.UserLevelVO</value>
</list> </property> <property name="schemaUpdate" value="${hibernate.schemaUpdate}"/> </bean>

Hoffentlich einer von Euch kann mir helfen.

Aktualisiert Hier einige info aus dem log (onSubmit() setzt diese Einträge in der log -- der Letzte Eintrag sein sollten, wenn die Anfrage wird umgeleitet zu einer anderen Seite (nach der Aufzeichnung sollte die aktualisiert wurden).

 
[DEBUG] 2010-07-23 00:29:26,302 :org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.lookupSessionFactory(OpenSessionInViewFilter.java:239): Verwendung von SessionFactory 'sessionFactory' für OpenSessionInViewFilter 
[DEBUG] 2010-07-23 00:29:26,302 :org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:214): Rückkehr zwischengespeicherte Instanz der singleton-bean 'sessionFactory' 
[DEBUG] 2010-07-23 00:29:26,302 :org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:181): das Öffnen einzelner Hibernate-Session in OpenSessionInViewFilter 
[DEBUG] 2010-07-23 00:29:26,302 :org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:318): Eröffnung Hibernate-Session 
[DEBUG] 2010-07-23 00:29:26,303 :org.hibernate.impl.SessionImpl.(SessionImpl.java:247): eröffnet die Sitzung am timestamp: 5242215490777088 
[TRACE] 2010-07-23 00:29:26,303 :org.hibernate.impl.SessionImpl.setFlushMode(SessionImpl.java:1316): Einstellung flush-Modus: NIE 
[DEBUG] 2010-07-23 00:29:26,305 :org.apache.wicket.Sitzung.getPage(Session.java:700): Erste Seite [Pfad = 4:userprofile_form, versionNumber = 0] 
[DEBUG] 2010-07-23 00:29:26,306 :org.apache.wicket.markup.html.form.persistence.CookieValuePersister.getCookie(CookieValuePersister.java:210): kann Nicht finden, Cookie mit name=userprofile_form.E-Mail und Anfrage-URI=/fröhlich-app-skuld-web/
[TRACE] 2010-07-23 00:29:26,308 :org.hibernate.Motor.IdentifierValue.isUnsaved(IdentifierValue.java:127): nicht gespeicherte id-Wert: 0 
[TRACE] 2010-07-23 00:29:26,308 :org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:546): detached Instanz: com.optimistisch.app.skuldweb.domain.UserVO 
[TRACE] 2010-07-23 00:29:26,308 :org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:228): aktualisieren detached Instanz 
[TRACE] 2010-07-23 00:29:26,308 :org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:295): Update [Kom.optimistisch.app.skuldweb.domain.UserVO#1] 
[TRACE] 2010-07-23 00:29:26,310 :org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:346): Update [Kom.optimistisch.app.skuldweb.domain.UserVO#1] 
[TRACE] 2010-07-23 00:29:26,311 :org.hibernate.Motor.Cascade.cascade(Kaskade.java:138): - Verarbeitung von cascade ACTION_SAVE_UPDATE für: Kom.optimistisch.app.skuldweb.domain.UserVO 
[TRACE] 2010-07-23 00:29:26,312 :org.hibernate.Motor.CascadingAction$5.cascade(CascadingAction.java:239): cascading zu saveOrUpdate: com.optimistisch.app.skuldweb.domain.UserLevelVO 
[TRACE] 2010-07-23 00:29:26,312 :org.hibernate.Motor.IdentifierValue.isUnsaved(IdentifierValue.java:127): nicht gespeicherte id-Wert: 0 
[TRACE] 2010-07-23 00:29:26,312 :org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:546): detached Instanz: com.optimistisch.app.skuldweb.domain.UserLevelVO 
[TRACE] 2010-07-23 00:29:26,312 :org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:228): aktualisieren detached Instanz 
[TRACE] 2010-07-23 00:29:26,313 :org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:295): Update [Kom.optimistisch.app.skuldweb.domain.UserLevelVO#1] 
[TRACE] 2010-07-23 00:29:26,313 :org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:346): Update [Kom.optimistisch.app.skuldweb.domain.UserLevelVO#1] 
[TRACE] 2010-07-23 00:29:26,313 :org.hibernate.Motor.Cascade.cascade(Kaskade.java:173): done Verarbeitung cascade ACTION_SAVE_UPDATE für: Kom.optimistisch.app.skuldweb.domain.UserVO 
[DEBUG] 2010-07-23 00:29:26,314 :org.apache.wicket.RequestCycle.setRequestTarget(RequestCycle.java:644): ersetzen Anfrage Ziel org.apache.wicket.request.target.component.listener.ListenerInterfaceRequestTarget@676067951[Seite Klasse = com.optimistisch.app.skuldweb.web.Benutzer.UserProfilePage, id = 4, version = 0]->userprofile_form->Schnittstelle org.apache.wicket.markup.html-Code.form.IFormSubmitListener.IFormSubmitListener (request Parameter: [RequestParameters componentPath=4:userprofile_form pageMapName=null versionNumber=0 interfaceName=IFormSubmitListener componentId=null behaviorId=null urlDepth=-1 Parameter={[email protected],userprofile__form2_hf_0=} onlyProcessIfPathActive=false]) mit [BookmarkablePageRequestTarget@1030849724 pageClass=com.optimistisch.app.skuldweb.web.Benutzer.UserProfilePage] 

Update 2
Hier ist die UserVO ohne Getter/setter

@Entity
@Table(name = "USERS")
@NamedQueries({
    @NamedQuery(name = "user.getById", query = "from UserVO item where item.id = :id"),
    @NamedQuery(name = "user.getAllUsers", query = "from UserVO item order by item.registerDate desc"),
    @NamedQuery(name = "user.countAll", query = "select count(item) from UserVO item"),
    @NamedQuery(name = "user.getByUsername", query = "from UserVO item where item.username = :username"),
    @NamedQuery(name = "user.authenticate", query = "from UserVO item where item.username = :username AND item.passwordHash = :passwordHash")
})
public class UserVO extends BaseVO {

@Id  
@GeneratedValue(strategy = GenerationType.AUTO)  
@Column(name = "ID")  
protected long id;  

@OneToOne(cascade = CascadeType.ALL)
protected UserLevelVO userLevelVO;

@Basic
@Column(name = "USERNAME")
protected String username;

@Basic
@Column(name = "PASSWORD_HASH")
protected String passwordHash;

@Basic
@Column(name = "EMAIL")
protected String email;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "REGISTER_DATE")
protected Date registerDate;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_LOGIN_DATE")
protected Date lastLoginDate;

}

InformationsquelleAutor John | 2010-07-22
Schreibe einen Kommentar