接着:<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"
请问这问题出在哪里,,我的值都全部设置好的啊!
以下是我的代码:
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"
请问这问题出在哪里,,我的值都全部设置好的啊!
解决方案 »
- 使用filter获取网页绝对路径的问题
- 关于面向对象,两年了还是没弄明白
- 页面跳转问题
- djunit的case单独执行,最后能不能把覆盖率整合到一起
- JAVA版本问题
- 求助啊,spring的同志们进来帮我看看!
- tomcat重新部署项目就报错
- 请问将tomcat的端口改为80后,为什么访问不了127.0.0.1/admin了,总是把他的目录的文件列出来
- 飞鸟 学 Ant ----- 一个实际build.xml中的几点困惑
- 在JBuilder中无法加入关系字段(cmr field)
- 帮忙看个hibernate的错No row with the given identifier exists: [com.ltd.blog.bean.ArticleBean#1]
- struts架构中action中的actionforward问题
<column name="employId" not-null="true" />
</many-to-one>
试下。
<set name="replybbses" inverse="false">
<set name="replybbses" inverse="false" cascade="save-update">
<key>
<column name="bbsId" />
</key>
<one-to-many class="com.hibernate.hbm.Replybbs" />
</set>
再试下
//加下面一行。
bbs.getReplybbses().add(reply);
session.save(bbs); 可能是这个错无。
如果还不行 我也没有办法啦。
等高手来解决吧。
哈哈!!!
在保存 多的一端的对象的时候如果没有将两段都关联起来 就回无法插入外键。
<column name="employId" />
<generator class="assigned"> </generator>
</id>
generator 的class属性值错了这个说明了主键为用户自行分配,即系你要确定employId的值,如果你想这样的employId自行分配,可以<generator class="increment"> </generator> 或<generator class="identity"> </generator> 当数据库是sql server 或mysql时,用这个这个属性说明了对整形数列进行自动增长。
以下我的代码看哪里错了!
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"
<id name="replyId" type="java.lang.Long">
<column name="replyId" />
<generator class="assigned"></generator>
</id>
楼主能不能帮说一下在jsp提交后执行Action的时候怎么才能找到hibernate.hbm.xml文件啊,我放到一个文件夹下就ok了
但是真正做项目的时候总得分开放把总提示/hibernate.hbm.xml not found
但大多都是把所有文件放在一起的,主要是讲hibernate配置的原理但路径问题一直困扰着我,正郁闷着了
我放到一起就可以
但放在不同路径下就不知道咋弄了
网上没有
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对象也应该手工来设置它的主键吧.没有全部看你的代码就看了一下错误提示,你试试.
你去看看你的类是不是对主键进行了明确的赋值,比如
setEmployeeId();因为这个类型就必须这样赋值才行