for (Iterator iter = forms.iterator(); iter.hasNext(); ) {
Workform form = (Workform)iter.next();
System.out.println("form============"+form);
session.save(form);
Set refs = form.getFields(); // 是Workform.java的pojo类
System.out.println("refs============"+refs);
if (refs == null&refs.isEmpty())
{这里我打印出来的
form============com.cyt.oa.workform.model.Workform@7ca9bd[id=<null>]
refs============null
java.lang.NullPointerException 出了个异常
为什么form 后面的 Id 会是null呢 refs的值怎么取不到?
workform.hbm.xml 里面是这么写的<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.cyt.oa.workform.model">
<class name="Workform" table="workform">
<id column="id" name="id" type="java.lang.Long">
<generator class="native"/>
</id>
<property column="confine" name="confine" type="java.lang.Long"/>
<property column="name" name="name" type="string"/>
<property column="version" name="version" type="integer"/>
<property column="template" name="template" type="string"/>
<property column="title" name="title" type="string"/>
<property column="usable" name="usable" type="boolean"/>
<property column="isjunk" name="isjunk" type="boolean"/>
<property column="fld" name="fld" type="string"/>
<property column="cabeditflds" name="cabeditflds" type="string"/>
<property column="allflds" name="allflds" type="string"/>
<property column="formulas" name="formulas" type="string"/>
<property column="autowater" name="autoWater" type="string"/>
<property column="time" name="timestamp" type="java.util.Date"/>
<set name="fields" table="reference" inverse="true" lazy="true">
<key column="workformid"/>
<one-to-many class="com.cyt.oa.workform.model.Reference"/>
</set>
</class>
</hibernate-mapping>
Workform form = (Workform)iter.next();
System.out.println("form============"+form);
session.save(form);
Set refs = form.getFields(); // 是Workform.java的pojo类
System.out.println("refs============"+refs);
if (refs == null&refs.isEmpty())
{这里我打印出来的
form============com.cyt.oa.workform.model.Workform@7ca9bd[id=<null>]
refs============null
java.lang.NullPointerException 出了个异常
为什么form 后面的 Id 会是null呢 refs的值怎么取不到?
workform.hbm.xml 里面是这么写的<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.cyt.oa.workform.model">
<class name="Workform" table="workform">
<id column="id" name="id" type="java.lang.Long">
<generator class="native"/>
</id>
<property column="confine" name="confine" type="java.lang.Long"/>
<property column="name" name="name" type="string"/>
<property column="version" name="version" type="integer"/>
<property column="template" name="template" type="string"/>
<property column="title" name="title" type="string"/>
<property column="usable" name="usable" type="boolean"/>
<property column="isjunk" name="isjunk" type="boolean"/>
<property column="fld" name="fld" type="string"/>
<property column="cabeditflds" name="cabeditflds" type="string"/>
<property column="allflds" name="allflds" type="string"/>
<property column="formulas" name="formulas" type="string"/>
<property column="autowater" name="autoWater" type="string"/>
<property column="time" name="timestamp" type="java.util.Date"/>
<set name="fields" table="reference" inverse="true" lazy="true">
<key column="workformid"/>
<one-to-many class="com.cyt.oa.workform.model.Reference"/>
</set>
</class>
</hibernate-mapping>
当数据刚保存的时候,你不搜索数据库或返回ID,就直接取值,当然取不到值啦!
for (Iterator iter = forms.iterator(); iter.hasNext(); ) {
Workform form = (Workform)iter.next();
System.out.println("form============"+form);
session.save(form);
Set refs = form.getFields(); // 是Workform.java的pojo类
System.out.println("refs============"+refs);
if (refs == null&refs.isEmpty())
{ //建议改成以下试试
Iterator iter = forms.iterator();
while(iter.hasNext()){
Workform form = (Workform)iter.next();
System.out.println("form============"+form);
session.save(form);
Set refs = form.getFields(); // 是Workform.java的pojo类
System.out.println("refs============"+refs);
if (refs == null&refs.isEmpty())
{
你用的id是自动增长的吧!
[color=#FF0000]当数据刚保存的时候,你不搜索数据库或返回ID,就直接取值,当然取不到值啦![/color]
还有一个就是用save()方法的时候,它不会立刻保存的数据库的,除非你 flush()
for (Iterator iter = forms.iterator(); iter.hasNext(); ) {
Workform form = (Workform)iter.next();
System.out.println("form============"+form);
session.save(form);
session.flush();
Set refs = form.getFields(); // 是Workform.java的pojo类
System.out.println("refs============"+refs);
if (refs == null&refs.isEmpty())
{
Workform form = (Workform)iter.next();
System.out.println("form============"+form);
session.save(form);
session.flush();
Set refs = form.getFields(); // 是Workform.java的pojo类
System.out.println("refs============"+refs);
if (refs == null&refs.isEmpty())
{
已经在数据里了,如果我刷新页面后,得到得结果是正确的 ,可是在后台就报了这个空指针错, 另外页面上
也出了个窗口“org.hibernate.sessionException session was already closed”
function issueCForm(){
var ocx=getNestedOCX();
var issued=ocx.issued;
var modified=ocx.Modified;
var changed=ocx.edited;
var saveResult=true;
var issueResult=false;
try{
if(changed) saveResult=(ocx.saveTable()==0); //如果需要,则保存表单
if(saveResult) issueResult=(ocx.issueTable()==0); //保存成功,继续发布表单
}catch(e){
alert(e.message); // 这里 出的那个hibernate异常 这里不是根本的原因,主要还是那个空指针
return false;
}
if((changed && saveResult) || (issueResult && !issued)){
if(issueResult && !issued){
//页面跳转
window.opener.allforms.submit();
window.alert("表单启用成功!"); //modify by
self.close();
}
}
return true;
}
}
也出了个窗口“org.hibernate.sessionException session was already closed已经是另外的问题了,
session was already closed 说明你把seesion关闭后又调用了session!
form============com.cyt.oa.workform.model.Workform@1f75442[id=<null>]
refs============null
java.lang.NullPointerException
at com.gardenia.deploy.DynamicDeployee.insertWorkform(DynamicDeployee.java:81)
at com.gardenia.deploy.DynamicDeployee.deploy(DynamicDeployee.java:42)
at com.gardenia.webservice.UploadClobHelper.uploadClob(UploadClobHelper.java:45)
at com.gardenia.webservice.CFormServiceSoapBindingImpl.uploadClob(CFormServiceSoapBindingImpl.java:307)
at com.gardenia.webservice.CFormServiceSoapBindingImpl.issueCustomForm(CFormServiceSoapBindingImpl.java:130)
at com.gardenia.webservice.CFormServiceSoapBindingSkeleton.issueCustomForm(CFormServiceSoapBindingSkeleton.java:60)
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 org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
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)
form============com.cyt.oa.workform.model.Workform@1f75442[id= <null>]
refs============null
java.lang.NullPointerException
at com.gardenia.deploy.DynamicDeployee.insertWorkform(DynamicDeployee.java:81)//DynamicDeployee.java:81行是什么东西啊
at com.gardenia.deploy.DynamicDeployee.deploy(DynamicDeployee.java:42)
你有没有添加这个代码(session.flush(); ),如果添加了的话,id是可以拿到的,你可以打印出来!
Set refs = form.getFields();取的是什么值??这个值你之前设置过没有的呢??怀疑这里才是问题所在!
你这个判断也有问题!如果refs 为null的话旧出异常了
这里就是 if (refs == null&refs.isEmpty()) 这一行啊
Set refs = form.getFields(); 这里取的值
public Set getFields()
{
return fields;
} public void setFields(Set fields)
{
this.fields = fields;
}
这里去设置的
Set refs = form.getFields(); // 是Workform.java的pojo类
System.out.println("refs============"+refs);
if (refs == null&refs.isEmpty())
{
这代码及后面都先去掉,只保留保存的代码,看会不会报异常,
如果一步步排查,最终把问题找也来