接着:<br/>
以下是我的代码:
public class Test {
private Session session = null ;
Test()
{
Configuration config = new Configuration().configure() ;
// 从配置中取出SessionFactory
SessionFactory factory = config.buildSessionFactory() ;
// 从SessionFactory中取出一个Session
this.session = factory.openSession(); }
public static void main(String[] args) {
Test test=new Test();
test.save();
}
public String save(){
Transaction tran=session.beginTransaction();
Bbs bbs=new Bbs();
bbs.setBbsContent("bbsContent");
bbs.setBbsId(new Long(5));
bbs.setBbsTitle("bbsTitle");
bbs.setBuildDate(new Date());
bbs.setReplyAmount(new Integer(1));
bbs.setReplyAmount(new Integer(22));
Employ employ=new Employ();
employ.setBuildDate(new Date());
employ.setEmployId(new Long(3));
employ.setEmployName("employName");
employ.setLoginAmount(new Integer(0));
employ.setIntegral(new Integer(0));
employ.setNickName("相信自己");
employ.setPassword("password");
employ.setPortrait("portrait");
employ.setRoleId(new Long(1));
bbs.setEmploy(employ);
Replybbs reply=new Replybbs();
reply.setBbs(bbs);
reply.setEmploy(employ);
reply.setReplyContent("replyContent");
reply.setReplyDate(new Date());
reply.setReplyId(new Long(1));
session.save(bbs);
tran.commit();
return null;
}
}我执行后抱以下错:
bernate: select employ_.employId, employ_.employName as employName8_, employ_.password as password8_, employ_.nickName as nickName8_, employ_.buildDate as buildDate8_, employ_.portrait as portrait8_, employ_.roleId as roleId8_, employ_.integral as integral8_, employ_.loginAmount as loginAmo9_8_ from test.dbo.employ employ_ where employ_.employId=?
Hibernate: insert into test.dbo.bbs (employId, bbsTitle, bbsContent, buildDate, replyAmount, bbsId) values (?, ?, ?, ?, ?, ?)
org.hibernate.exception.GenericJDBCException: could not insert: [com.hibernate.hbm.Bbs]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1869)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2200)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:46)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:223)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:86)
at com.hibernate.test.Test.save(Test.java:56)
at com.hibernate.test.Test.main(Test.java:27)
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]无法将 NULL 值插入列 'employId',表 'test.dbo.bbs';该列不允许空值。INSERT 失败。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.executeUpdate(Unknown Source)
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:22)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1853)
... 12 more
Exception in thread "main" 
请问这问题出在哪里,,我的值都全部设置好的啊!

解决方案 »

  1.   

    我的数据库是MS sql 2000,用的是jdbc连接.
      

  2.   

    Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]无法将 NULL 值插入列 'employId',表 'test.dbo.bbs';该列不允许空值。INSERT 失败。 
      

  3.   

    Replybbs.hbm.xml 中 <many-to-one name="employ" class="com.hibernate.hbm.Employ" fetch="select" cascade="save-update"> 
                <column name="employId" not-null="true" /> 
            </many-to-one> 
    试下。
      

  4.   

    bbshbm.xml 中 
    <set name="replybbses" inverse="false"> 
      

  5.   

    说employId'这个不能为空,employ.setEmployId(new Long(3));bbs.setEmploy(employ);我都设置的啊!咋还是报错呢?
      

  6.   

    bbshbm.xml 中
    <set name="replybbses" inverse="false" cascade="save-update"> 
                <key> 
                    <column name="bbsId" /> 
                </key> 
                <one-to-many class="com.hibernate.hbm.Replybbs"  /> 
            </set> 
    再试下
      

  7.   

    如果还不行。reply.setReplyId(new Long(1));
    //加下面一行。 
    bbs.getReplybbses().add(reply);
    session.save(bbs); 可能是这个错无。
    如果还不行 我也没有办法啦。
    等高手来解决吧。
    哈哈!!!
      

  8.   

    问题虽然没解决,但bbs.getReplybbses().add(reply); 这句对我帮助很多,你说下这句是什么作用!我生搬硬套的加点代码看行不!
      

  9.   

    一对多的双向关联中 如果 将 一的一端 inverse设置为 true 那就会将控制权交给多的一段。 
    在保存 多的一端的对象的时候如果没有将两段都关联起来 就回无法插入外键。
      

  10.   

    bbs.getReplybbses().add(reply);  这段代码是工具自动生成的,但我第一次使用,不知道什么作用希望解决下,谢谢!
      

  11.   

    <id name="employId" type="java.lang.Long"> 
                <column name="employId" /> 
                <generator class="assigned"> </generator> 
    </id> 
    generator 的class属性值错了这个说明了主键为用户自行分配,即系你要确定employId的值,如果你想这样的employId自行分配,可以<generator class="increment"> </generator> 或<generator class="identity"> </generator>      当数据库是sql server 或mysql时,用这个这个属性说明了对整形数列进行自动增长。
      

  12.   

    我的目的是在BBS库在加入一个记录!
    以下我的代码看哪里错了!
    Transaction tran=session.beginTransaction();
    Employ employ=new Employ();
    employ.setEmployId(new Long(3));
    employ.setRoleId(new Long(1));
    Bbs bbs=new Bbs();
    bbs.setEmploy(employ); //在bbs中加入会员信息
    session.save(bbs);//持久化对象
    tran.commit();
    以下是报的错:
    org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.hibernate.hbm.Bbs
    at org.hibernate.id.Assigned.generate(Assigned.java:32)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:85)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:481)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:476)
    at com.hibernate.test.Test.save(Test.java:36)
    at com.hibernate.test.Test.main(Test.java:27)
    Exception in thread "main" 
      

  13.   

    我主键生成方式如下:
            <id name="replyId" type="java.lang.Long">
                <column name="replyId" />
                <generator class="assigned"></generator>
            </id>
      

  14.   

    我也初学hibernate,估计楼主比我还强点
    楼主能不能帮说一下在jsp提交后执行Action的时候怎么才能找到hibernate.hbm.xml文件啊,我放到一个文件夹下就ok了
    但是真正做项目的时候总得分开放把总提示/hibernate.hbm.xml not found
      

  15.   

    这是配置文件啊!你用MyEclipse自动生成就是了!你在网上找个hibernate的示例吧,有入门的!
      

  16.   

    那些入门实例我看了都,都运行过了,可以
    但大多都是把所有文件放在一起的,主要是讲hibernate配置的原理但路径问题一直困扰着我,正郁闷着了
    我放到一起就可以
    但放在不同路径下就不知道咋弄了
    网上没有
      

  17.   

    hibernate.hbm.xml 要和你的实体类放一起!!!实体名称是什么这个就得改成什么什么.hbm.xml多个实体就多个hbm.xml
      

  18.   

    Transaction tran=session.beginTransaction(); 
    Employ employ=new Employ(); 
    employ.setEmployId(new Long(3)); 
    employ.setRoleId(new Long(1)); 
    Bbs bbs=new Bbs(); 
    bbs.setEmploy(employ); //在bbs中加入会员信息 
    session.save(bbs);//持久化对象 
    tran.commit(); 
    以下是报的错: 
    org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.hibernate.hbm.Bbs 
    at org.hibernate.id.Assigned.generate(Assigned.java:32) //-----------------------------------------
    LZ你的是一对多的关系吗?
    你Employ 和Bbs两个表应该都是手工设置主键吧.
    它们的配置文件中应该都有以下这句配置:
    <generator class="assigned"> </generator> 
    那你的以上代码中的bbs对象也应该手工来设置它的主键吧.没有全部看你的代码就看了一下错误提示,你试试.
      

  19.   

    <generator class="assigned"> </generator> 
    你去看看你的类是不是对主键进行了明确的赋值,比如
    setEmployeeId();因为这个类型就必须这样赋值才行