简单的用hibernate中的save()方法向表中插入一条数据,数据4个字段,其中id为自增长,workname字段是我从表单获取过来的内容,其他两个str1,str2库中设置可为空,所以暂时不添加,这个save()方法我怎么用都写不对,尤其Id这里,我写上setId()就报错:不能添加显性数据什么的,不写的话又提示null字段错误,很郁闷,原来做的都是读取今天做个添加怎么都写不出来,帮帮忙大家:
action代码:public class Addwork extends Action {
public ActionForward execute (ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
{
try{
request.setCharacterEncoding("gb2312");
String workname = request.getParameter("workname");
if(!workname.equals("") && !workname.isEmpty())
{
List temp = new WorkNameDAO().findbyname(workname);
if(temp.size()>=1)
{
return mapping.findForward("err");
}
else
{
/*SaveForm saveForm = (SaveForm) form;
Transaction tx=WorkNameDAO.getSessionFactory().openSession().beginTransaction();
WorkName article=new WorkName();
article.setTitle(saveForm.getTitle());
article.setContent(saveForm.getContext());
WorkNameDAO.save(article);
tx.commit();
return mapping.findForward("success");*/
HibernateSessionFactory.getSessionFactory().openSession();
WorkName wkname = new WorkName();
wkname.setWorkname(workname);
wkname.setBewrite("");
wkname.setWkprincipal("");
WorkNameDAO um = new WorkNameDAO();
um.save(wkname);
HibernateSessionFactory.getSessionFactory().close();
return mapping.findForward("addsecc");
}
}
else
return mapping.findForward("err");
}
catch(UnsupportedEncodingException e){
return mapping.findForward("logonerr");
}
}
}
MyEclipse自动生成的DAO文件代码:
public void save(WorkName transientInstance) {
log.debug("saving WorkName instance");
try {
getSession().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
action代码:public class Addwork extends Action {
public ActionForward execute (ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
{
try{
request.setCharacterEncoding("gb2312");
String workname = request.getParameter("workname");
if(!workname.equals("") && !workname.isEmpty())
{
List temp = new WorkNameDAO().findbyname(workname);
if(temp.size()>=1)
{
return mapping.findForward("err");
}
else
{
/*SaveForm saveForm = (SaveForm) form;
Transaction tx=WorkNameDAO.getSessionFactory().openSession().beginTransaction();
WorkName article=new WorkName();
article.setTitle(saveForm.getTitle());
article.setContent(saveForm.getContext());
WorkNameDAO.save(article);
tx.commit();
return mapping.findForward("success");*/
HibernateSessionFactory.getSessionFactory().openSession();
WorkName wkname = new WorkName();
wkname.setWorkname(workname);
wkname.setBewrite("");
wkname.setWkprincipal("");
WorkNameDAO um = new WorkNameDAO();
um.save(wkname);
HibernateSessionFactory.getSessionFactory().close();
return mapping.findForward("addsecc");
}
}
else
return mapping.findForward("err");
}
catch(UnsupportedEncodingException e){
return mapping.findForward("logonerr");
}
}
}
MyEclipse自动生成的DAO文件代码:
public void save(WorkName transientInstance) {
log.debug("saving WorkName instance");
try {
getSession().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
解决方案 »
- flotr2怎么添加点击事件?
- extjs 写的树形菜单在ie6下无法显示???
- 请问大家一个关于验证的问题!!!急~~~
- 论坛发贴的留言版如何屏蔽含html的代码
- (源创)最近我研究搜索引擎 七 (长长中国人的志气篇) 如何创造搜索引擎的新时代
- 使用javaBean时出现的问题
- JAVA1.6编译的applet在JAVA1.7下边不能打开 是什么原因?
- 谁知道jsp与,mysql连接时,属性文件db.properties怎么配?高手帮忙呀
- 各位大哥给点建议。关于短信方面的(SMS)。
- 哪IBMwebSphere和Tomcat下载
- 如何设置让IIS支持JSP?
- 为什么无法在SessionFactory中获取openSession(Spring+hibernate+Struts2)
package com.pro.entity;/**
* WorkName entity.
*
* @author MyEclipse Persistence Tools
*/public class WorkName implements java.io.Serializable { // Fields private String workname;
private Integer id;
private String bewrite;
private String wkprincipal; // Constructors /** default constructor */
public WorkName() {
} /** minimal constructor */
public WorkName(Integer id) {
this.id = id;
} /** full constructor */
public WorkName(Integer id, String bewrite, String wkprincipal) {
this.id = id;
this.bewrite = bewrite;
this.wkprincipal = wkprincipal;
} // Property accessors public String getWorkname() {
return this.workname;
} public void setWorkname(String workname) {
this.workname = workname;
} public Integer getId() {
return this.id;
} public void setId(Integer id) {
this.id = id;
} public String getBewrite() {
return this.bewrite;
} public void setBewrite(String bewrite) {
this.bewrite = bewrite;
} public String getWkprincipal() {
return this.wkprincipal;
} public void setWkprincipal(String wkprincipal) {
this.wkprincipal = wkprincipal;
}}
Hibernate:
select
workname0_.workname as workname3_,
workname0_.id as id3_,
workname0_.bewrite as bewrite3_,
workname0_.wkprincipal as wkprinci4_3_
from
ProblemSys.dbo.WorkName workname0_
where
workname0_.workname='义洛矿'
Hibernate:
insert
into
ProblemSys.dbo.WorkName
(id, bewrite, wkprincipal)
values
(?, ?, ?) select
scope_identity()
2010-1-21 14:59:29 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'WorkName' 中的标识列插入显式值。
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.executeInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.execute(Unknown Source)
at org.hibernate.id.IdentityGenerator$InsertSelectDelegate.executeAndExtract(IdentityGenerator.java:108)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at com.pro.entity.WorkNameDAO.save(WorkNameDAO.java:33)
at com.pro.action.Addwork.execute(Addwork.java:56)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.pro.entity.WorkName" table="WorkName" schema="dbo" catalog="ProblemSys">
<id name="workname" type="java.lang.String">
<column name="workname" length="50" />
<generator class="native"></generator>
</id>
<property name="id" type="java.lang.Integer">
<column name="id" not-null="true" />
</property>
<property name="bewrite" type="java.lang.String">
<column name="bewrite" length="50" />
</property>
<property name="wkprincipal" type="java.lang.String">
<column name="wkprincipal" length="50" />
</property>
</class>
</hibernate-mapping>
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration><session-factory>
<property name="connection.username">sa</property>
<property name="connection.url">
jdbc:microsoft:sqlserver://localhost:1433
</property>
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<property name="myeclipse.connection.profile">Problem</property>
<property name="connection.driver_class">
com.microsoft.jdbc.sqlserver.SQLServerDriver
</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="connection.password"></property>
<mapping resource="com/pro/entity/Usertable.hbm.xml" />
<mapping resource="com/pro/entity/Problem.hbm.xml" />
<mapping resource="com/pro/entity/ProType.hbm.xml" />
<mapping resource="com/pro/entity/WorkName.hbm.xml" /></session-factory></hibernate-configuration>
<hibernate-mapping>
<class name="com.pro.entity.WorkName" table="WorkName" schema="dbo" catalog="ProblemSys">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"></generator>
</id>
<property name="workname" type="java.lang.String">
<column name="workname" length="50" not-null="true" />
</property>
<property name="bewrite" type="java.lang.String">
<column name="bewrite" length="50" />
</property>
<property name="wkprincipal" type="java.lang.String">
<column name="wkprincipal" length="50" />
</property>
</class>
</hibernate-mapping>
,还是不太熟悉流程。把id改成native ??就行了?
<column name="workname" length="50" />
<generator class="native"></generator>
</id>
你String的id怎么自增长啊
<generator class="native" /> 改成 <generator class="assigned" />
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.pro.entity.WorkName" table="WorkName" schema="dbo" catalog="ProblemSys">
<id name="id" type="java.lang.Integer">
<column name="id" not-null="true"/>
<generator class="native"></generator>
</id>
<property name="workname" type="java.lang.String">
<column name="workname" length="50" />
</property>
<property name="bewrite" type="java.lang.String">
<column name="bewrite" length="50" />
</property>
<property name="wkprincipal" type="java.lang.String">
<column name="wkprincipal" length="50" />
</property>
</class>
</hibernate-mapping>之后,点插入后,myeclip后台输出了insert into的代码:
Hibernate:
insert
into
ProblemSys.dbo.WorkName
(workname, bewrite, wkprincipal)
values
(?, ?, ?) select
scope_identity(),但是为什么在库中找不到添加的数据呢?而且,只有关闭了tomcat后才能看数据库,开着的情况下查看库中数据没反应,假死状态。
WorkName wkname = new WorkName();
wkname.setWorkname(workname);
wkname.setBewrite("");
wkname.setWkprincipal("");
WorkNameDAO um = new WorkNameDAO();
um.save(wkname);
是不是少些什么了??
开启事物?
<id name="id" type="java.lang.Integer">
<column name="id" not-null="true"/>
<generator class="increment"></generator>
</id>
<property name="workname" type="java.lang.String">
<column name="workname" length="50" />
</property>
<property name="bewrite" type="java.lang.String">
<column name="bewrite" length="50" />
</property>
<property name="wkprincipal" type="java.lang.String">
<column name="wkprincipal" length="50" />
</property>
</class>