我是通过hibernate3.2连接到weblogic的数据源,此数据源是db2的一个数据库
我的方法是这样的:
    Employee emp = null;
    Session session = null;
    try{
session = HibernateUtil.getSession();
session.beginTransaction();
emp = (Employee)session.get(Employee.class, "777777");
System.out.println(emp);  //这里是正常可以打印出来的

session.getTransaction().commit();
     }catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
     }
     try{
        emp.setName("vincent");
session = HibernateUtil.getSession();
session.beginTransaction();

session.update(emp); //这里的更新会失败

session.getTransaction().commit();
     }catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
     }

解决方案 »

  1.   

    发出的更新语句是正确的。但更新失败了。
    Hibernate: update EMPLOYEE set EMP_CODE=?, EMP_NAME=?, EMP_ENAME=?, EMP_SEX=?, EMP_BIRTHDAY=?, EMP_EDUCATION=?, EMP_DUTY=?, EMP_TITLE=?, EMP_WORK=?, EMP_DEPART=?, EMP_IDCARD=?, EMP_HOMEADDR=?, EMP_POSTCODE=?, EMP_TEL1=?, EMP_TEL2=?, EMP_SITDAY=?, LASTMODIFYUSERID=?, LASTMODIFYTIME=?, STATUS=? where EMP_ID=?
    2012-03-07 11:53:37,811  WARN (org.hibernate.util.JDBCExceptionReporter:71) - SQL Error: 0, SQLState: HY000
    2012-03-07 11:53:37,812 ERROR (org.hibernate.util.JDBCExceptionReporter:72) - [OWLS][DB2 JDBC Driver]Resource Limits Reached( DRDA HEAP ). Diagnostic Info: FUNCTION ID = 0192, PROBE POINT = 0400, REASON CODE = 0x0200002D, RETURN CODE 1 = 0xFFFFD61F, RETURN CODE 2 = 0x00087BF4, RETURN CODE 3 = 0x00000000, MESSAGE = Parser: Memory allocation error.
    2012-03-07 11:53:37,814 ERROR (org.hibernate.event.def.AbstractFlushingEventListener:301) - Could not synchronize database state with session
    org.hibernate.exception.GenericJDBCException: could not update: [com.homello.basemgr.po.Employee#777777]
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2360)
    at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2242)
    at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2542)
    at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92)
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:388)
    at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:363)
    at org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:644)
    at org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:640)
    at com.homello.basemgr.dao.impl.EmployeeDAOImpl.update(EmployeeDAOImpl.java:78)
    at com.homello.basemgr.dao.test.EmployeeDaoImplTest.testUpdate(EmployeeDaoImplTest.java:75)
    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:597)
    at junit.framework.TestCase.runTest(TestCase.java:154)
    at junit.framework.TestCase.runBare(TestCase.java:127)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:118)
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
      

  2.   

    你数据库name字段设置的多长?
      

  3.   

    我的表结构是这样的:
    EMP_ID;CHARacter;6;;;NO;YES;;
    EMP_CODE;VARCHAR;10;;;NO;YES;;
    EMP_NAME;VARCHAR;12;;'';NO;NO;;
    EMP_ENAME;VARCHAR;20;;'';NO;NO;;
    EMP_SEX;CHARacter;1;;'2';NO;NO;;
    EMP_BIRTHDAY;DATE;10;;'1900-01-01';NO;NO;;
    EMP_EDUCATION;CHARacter;6;;'000000';NO;NO;;
    EMP_DUTY;CHARacter;6;;'000000';NO;NO;;
    EMP_TITLE;CHARacter;6;;'000000';NO;NO;;
    EMP_WORK;CHARacter;6;;'000000';NO;NO;;
    EMP_DEPART;CHARacter;4;;'0000';NO;NO;;
    EMP_IDCARD;VARCHAR;20;;'';NO;NO;;
    EMP_HOMEADDR;VARCHAR;60;;'';NO;NO;;
    EMP_POSTCODE;VARCHAR;6;;'';NO;NO;;
    EMP_TEL1;VARCHAR;20;;'';NO;NO;;
    EMP_TEL2;VARCHAR;20;;'';NO;NO;;
    EMP_SITDAY;DATE;10;;CURRENT DATE;NO;NO;;
    LASTMODIFYUSERID;CHARacter;6;;'000000';NO;NO;;
    LASTMODIFYTIME;TIMESTAMP;26;6;CURRENT TIMESTAMP;NO;NO;;
    STATUS;CHARacter;1;;'0';NO;NO;;
      

  4.   

    EMP_NAME;VARCHAR;12;;'';NO;NO;;只有12位,怎么加得进14位长度呢?