我想在有两张表,然后我通过Hibernate的多对多的关系给他们建立关系,如:role角色表中有多个权限,一个权限对应多个角色,然后我建立了 关联表 role_right   里面有字段:rfid,rf_role_id,rf_right_code
关系插入的时候:rfid插入不了,hibernate没有发查询序列SQL语句,错误代码如下:很常见在网上
sql.BatchUpdateException: ORA-01400: cannot insert NULL into ("SHARME"."SYS_ROLE_RIGHT"."RF_ID") oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:459)
oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:3907)
org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
com.sharme.right.web.action.SysRoleAction.doAssignRights(SysRoleAction.java:261)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.sharme.recruitment.tools.FilterCloseSession.doFilter(FilterCloseSession.java:22)
com.sharme.recruitment.tools.FilterString.doFilter(FilterString.java:49)

解决方案 »

  1.   

    高手指点啊,有人将配置文件主键ID java.lang.Integer该为int就行,但是不行,还有人说将序列类型改为identity,然后也是序列名,就行,但是好像也不行,求高手指点
      

  2.   

    不能插入空字符 看你的配置hbm文件
      

  3.   

    配置文件。。关联属性如set中加一个cascade="save-update"或者cascade="all"
    1. save-update只有持久化对象保存和更新操作,才会级联操作关联对象
    2. all对持久化对象的所有操作都会级联操作关联对象(子)
      

  4.   

    rfid在应用中有无使用,没有使用建议把其删除掉,如果有使用需要建立中间表的实体....将你上面的分成两个one-to-many来做吧..
      

  5.   

    对于这个问题我也知道为什么,3张表,role 、right、role_right(中间表),在oracle中中间表有3个字段,一个主键自动增长,外个外间分别引用role中的主键合right中的主键,SSH集成的时候,是没有中间表生成的,既然没有中间表,hibernate根本无法通过序列自动中间表主键,当然这是是由于3张表之间的关系式many-to-many的关系,如果是单一的one-to-many,双向配置,hibernate确实会自动通过配置生成序列主键,但是我这里必须用many-to-many,这个问题我已经决定了,我将中间表的主键删除,就不会有这个问题,但是我想请教高手们,如果不删除主键,并配置many-to-many,而且没有中间实体类,需要怎么实现主键表的序列自动增加的问题