把你在EJB里update的SQL操作拿到外面去运行看是否有报错。
解决方案 »
- 关于JAVA线程问题
- spring form:options 用法 问题。
- java.lang.NoClassDefFoundError: org/hibernate/Hiberna
- 用netbeans建立的maven项目没有struts-config文件
- (java)想从远程服务器上下载文件,在客户端浏览时候,弹出下载对话框
- 有关: Struts2.0+spring+JPA 自定义分页标签
- 关于Struts的View部分jsp实现的一个简单问题
- 求张孝祥java视频教程,免费的
- 请问关于TOMCAT5的速度问题和MVC相关的经验!
- 一个struts的问题
- 请求大家帮助!!
- Eclipse或者WSAD能做什么样的毕业设计?(共两贴,108分)
强!
public void updateTransinfo2(String substaid, String lineid, String transid,
BigDecimal voltagein, Timestamp usedate,
String transname, String copyerid,
Integer transtypeid, Integer usetype,
Integer transcapa, Integer booknum,
String transaddr, String producecompany,
String producecode, Timestamp producedate,
Integer nousedays, Integer compoint,
BigDecimal rating) { TransinfoPK pk = new TransinfoPK(substaid, lineid, transid);
try {
TransinfoRemote ejb = Transinfohome.findByPrimaryKey(pk); ejb.setVoltagein(voltagein);
ejb.setUsedate(usedate); ejb.setTransname(transname);
ejb.setCopyerid(copyerid);
ejb.setTranstypeid(transtypeid);
ejb.setUsetype(usetype); ejb.setTranscapa(transcapa); ejb.setTransaddr(transaddr);
ejb.setProducecompany(producecompany);
ejb.setProducecode(producecode); ejb.setProducedate(producedate);
ejb.setNousedays(nousedays);
ejb.setCompoint(compoint);
ejb.setRating(rating);
ejb.setBooknum(booknum); }
catch (RemoteException ex) {
}
catch (FinderException ex) {
}
}这是我在JBUILDER里生成的测试端:
public static void main(String[] args) {
dyxxSessTestClient1 client = new dyxxSessTestClient1();
dyxxSess test=client.create(); String substaid="01"; //变电站编号
String lineid="3030"; //线路编号
String transid="005"; //变压器编号
BigDecimal voltagein=new BigDecimal("36.1"); //输入端电压
Timestamp usedate = Timestamp.valueOf("2005-11-11 15:14:18.999999911");//投运日期 String transname="33"; //变压器名称
String copyerid="01"; //抄表员编号
String charcomid="02"; //供电所编号
Integer transtypeid=Integer.valueOf(1); //变压器类型
Integer usetype=Integer.valueOf(0); //专用公用标志 Integer transcapa=Integer.valueOf(33); //固定容量
Integer booknum=Integer.valueOf(33); //表本号
String transaddr="33"; //安装地址
String producecompany="33"; //生产厂家
String producecode="33"; //出厂编号
Timestamp producedate = Timestamp.valueOf("2005-08-08 15:14:18.999999911"); //出厂日期
Integer nousedays=Integer.valueOf(33); //运行天数
Integer compoint=Integer.valueOf(0);
BigDecimal rating=new BigDecimal("0.5555");
// BigDecimal rating=null;
try {
test.updateTransinfo2(
substaid, lineid, transid,
voltagein, usedate,
transname, copyerid, transtypeid,
usetype, transcapa,booknum
, transaddr,
producecompany, producecode,
producedate, nousedays, compoint, rating
);
}
catch (Exception ex) {
ex.printStackTrace();
} }当我在EJB 的public void updateTransinfo2(..){..}里 把 ejb.setBooknum(booknum);这句话注释掉以后,运行整个测试端没有问题,其余的字段也能够修改。如果有这句话,在测试端就会报上面的错误。update transinfo set booknum=999 where substaid='01' and lineid='3030' and transid='001'
这是我在查询分析器里单独更改那个有触发器的字段,触发器是可以正常工作的还望高手赐教
去掉触发器就不报错了吗?确定?若是: 在触发器最后加上commit tran试试!
begin tran
单独在查询分析器里执行(就是更改那个有触发器的字段),触发器完全起作用,当我在EJB里,把那个与触发器有关系的语句(ejb.setBooknum(booknum);)注释掉,整个EJB 的程序是没有问题的
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*创建修改变压器信息触发器*/
ALTER trigger T_update_trans
on transinfo
for update
as
--停运变压器,由触发器维护停运信息表
begin
--修改变压器表本号,由触发器维护用户的表本号
if update(booknum)
begin
begin tran trans1
update userinfo set booknum = b.booknum
from userinfo a,inserted b
where a.substaid = b.substaid and a.lineid = b.lineid and a.transid = b.transid
commit tran trans1
end
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
JBossTransactionRolledbackException 这个异常可能是关键,我搜过关于这个异常,但是没有看懂相关的文章
from userinfo a,inserted b
where a.substaid = b.substaid and a.lineid = b.lineid and a.transid = b.transid
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOALTER trigger T_update_transon transinfo
for update
as
--停运变压器,由触发器维护停运信息表
begin if update(booknum)
begin
update userinfo set booknum = b.booknum
from userinfo a,inserted b
where a.substaid = b.substaid and a.lineid = b.lineid and a.transid = b.transid
end
endGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO另外,这个触发器所更改的 userinfo 表中,还有一个触发器,也是针对booknum 这个字段做了一个触发器