These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Can change data but not save new data
PostPosted: Wed Jun 30, 2004 10:28 am 
Newbie

Joined: Fri Jun 18, 2004 11:33 am
Posts: 6
Location: Pennsylvania, USA
I'm testing hibernate using a session facade bean. When I run the createUser method and I pass it an existing username it changes the data in the db, but if I send it a new username/password it does nothing and bombs out on tx.commit(). Here's the offending session facade bean and the stack trace of the exception, and the bean

STACSFacadeBean.java

/*
* File Name: STACSFacade.java
* Author: Jason L. van Brackel
* Created: Jun 11, 2004
*
*/
package com.cimconsultants.STACS.session;

import java.rmi.RemoteException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;

import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.cimconsultants.STACS.hibernate.Role;
import com.cimconsultants.STACS.hibernate.User;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.MappingException;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;

/**
* @ejb.bean name="STACSFacade"
* jndi-name="STACSFacadeBean"
* type="Stateless"
*
* @ejb.dao class="com.cimconsultants.STACS.session.STACSFacadeDAO"
* impl-class = "com.cimconsultants.STACTS.dao.STACSFacadeDAOImpl"
*
* @ejb.resource-ref res-ref-name = "jdbc/STACS_DS"
* res-type = "javax.sql.Datasource"
* res-auth = "Container"
*
* @jboss.resource-ref res-ref-name = "jdbc/STACS_DS"
* jndi-name = "jdbc/STACS_DS"
*
* @author Jason
* @version 1.0
*/
public class STACSFacadeBean implements SessionBean {
protected SessionContext ctx;

/**
* Sets the session context
* @param javax.ejb.SessionContext the new ctx value
**/
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}

/**
* Unsets the session context
*/
public void unsetSessionContext() {
this.ctx = null;
}

/**
* The ejbCreate method.
*
* @ejb.create-method
**/
public void ejbCreate() throws javax.ejb.CreateException {

}

public void ejbActivate() throws EJBException, RemoteException { // TODO Auto-generated method stub

}


public void ejbPassivate() throws EJBException, RemoteException {

}

public void ejbRemove() throws EJBException, RemoteException {

}

/**
* Create a new user to the system
*
* @author Jason L. van Brackel
* @version 1.0
* @ejb.interface-method
*/
public void createUser(String username, String password, String role) throws HibernateException, MappingException, NamingException {
SessionFactory factory = null;
Session session = null;
// Set up the hibernate session
factory = getSessionFactory();
session = factory.openSession();

Transaction tx = session.beginTransaction();
User user = (User)session.get(User.class, username);
if(user == null) {
user = new User();
}
user.setUsername(username);
user.setPassword(password);

session.saveOrUpdate(user);
try {
tx.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}


private SessionFactory getSessionFactory() throws NamingException {
Hashtable props = new Hashtable();
props.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
props.put(InitialContext.PROVIDER_URL, "jnp://127.0.0.1:1099");
InitialContext initialContext = new InitialContext(props);
SessionFactory factory = (SessionFactory)initialContext.lookup("java:/HibernateFactory");
return factory;
}

}

User.java

package com.cimconsultants.STACS.hibernate;

import java.util.Collections;
import java.util.Set;

/**
* Represents a User in the system
*
* @hibernate.class table="Users"
*
* @author Jason L. van Brackel
* @version 1.0
*/

public class User {
private String username = null; // Primary Key
private String password = null;
private Set roles = Collections.EMPTY_SET;

public User() {}

/**
* The User's password
*
* @hibernate.property column = "Password"
* type = "string"
*
*
* @return String
*
* @return String
* @author Jason L. van Brackel
* @return String password
**/
public String getPassword() {
return password;
}

/**
* Sets the User's password
*
*
* @author Jason L. van Brackel
* @param String password
**/
public void setPassword(String password) {
this.password = password;
}

/**
* Returns the user's username
*
* @hibernate.id generator-class = "assigned"
* type="string"
* column="username"
*
* @author Jason L. van Brackel
* @return String username
**/
public String getUsername() {
return username;
}

/**
* Sets the user's username
*
* @author Jason L. van Brackel
* @param String username
**/
public void setUsername(String username) {
this.username = username;
}

/**
* The users roles
*
* @hibernate.set table = "UserRoles"
* cascade = "all"
* inverse = "true"
* order-by = "username"
*
* @hibernate.collection-key column="username"
*
* @hibernate.collection-one-to-many class="com.cimconsultants.STACS.hibernate.Role"
*
* @return Set
* @author Jason L. van Brackel
* @return Set of Role objects
**/
public Set getRoles() {
return roles;
}

/**
* Sets the User's password
*
*
* @author Jason L. van Brackel
* @param Set of Role objects
**/
public void setRoles(Set roles) {
this.roles = roles;
}
}

Stack Trace

net.sf.hibernate.HibernateException: Batch update row count wrong: 0
at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:65)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:122)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2417)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2368)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2236)
at net.sf.hibernate.transaction.JTATransaction.commit(JTATransaction.java:52)
at com.cimconsultants.STACS.session.STACSFacadeBean.createUser(STACSFacadeBean.java:115)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:683)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:72)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:84)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:267)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:128)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:118)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
at org.jboss.ejb.StatelessSessionContainer.internalInvoke(StatelessSessionContainer.java:331)
at org.jboss.ejb.Container.invoke(Container.java:700)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:546)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:101)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:90)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:46)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:45)
at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:100)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:85)
at $Proxy35.createUser(Unknown Source)
at com.cimconsultants.STACS.actions.UserActions.perform(UserActions.java:41)
at com.cimconsultants.web.html.HTMLActionSupport.perform(HTMLActionSupport.java:40)
at com.cimconsultants.web.SimpleRequestProcessor.processRequest(SimpleRequestProcessor.java:89)
at com.cimconsultants.STACS.controllers.DelegationServlet.process(DelegationServlet.java:132)
at com.cimconsultants.STACS.controllers.DelegationServlet.doPost(DelegationServlet.java:103)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at com.cimconsultants.STACS.filters.DelegationFilter.doFilter(DelegationFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(JBossSecurityMgrRealm.java:220)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:553)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.jboss.web.tomcat.tc4.statistics.ContainerStatsValve.invoke(ContainerStatsValve.java:76)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2417)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:65)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:577)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:197)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:781)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:549)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:677)
at java.lang.Thread.run(Thread.java:534)


Top
 Profile  
 
 Post subject: Somebody save my sanity
PostPosted: Wed Jun 30, 2004 12:03 pm 
Newbie

Joined: Fri Jun 18, 2004 11:33 am
Posts: 6
Location: Pennsylvania, USA
Ok I don't get why this works, and if somebody could explain this to me I would appreciated it. I replaced session.saveOrUpdate(user) with session.saveOrUpdateCopy(user), and this worked. I don't get it.

Help save my sanity.

Jason


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 02, 2004 12:10 am 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 3:00 pm
Posts: 1816
Location: Austin, TX
http://www.hibernate.org/hib_docs/reference/en/html/mapping.html#mapping-declaration-id-assigned


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.