http://www.tkk7.com/Files/zhaijianhui/ejb插刪改查.rar
/*
對(duì)表的修改
*/
public void updateNode(UseInfoDto dto) {
??? UseInfo useinfo;
?? try {
???? System.out.println("===========");
??? useinfo=home.findByPrimaryKey(dto.getName());
??? useinfo.setPassword(dto.getPassword());
??? System.out.println("用戶(hù)名"+dto.getName()+"修改后的記錄密碼"+dto.getPassword());
?? }
?? catch (Exception ex) {
???? ex.printStackTrace();
???? System.out.println("修改記錄出現(xiàn)異常");
?? }
? }
因?yàn)閚ame作為主鍵,所以不可能再在這里調(diào)用setName("xxxxxw")方法了,,
否則會(huì)產(chǎn)生錯(cuò)誤:
javax.ejb.TransactionRolledbackLocalException: EJB Exception: ; nested exception
?is: java.lang.IllegalStateException: [EJB:010144]The setXXX method for a primar
y key field may only be called during ejbCreate.
java.lang.IllegalStateException: [EJB:010144]The setXXX method for a primary key
?field may only be called during ejbCreate.
想一想有沒(méi)有必要修改主鍵的值呢,很顯然是沒(méi)有必要的,看看當(dāng)今的一些應(yīng)用就知道,電信,銀行這些部門(mén)只提供注冊(cè)用戶(hù)的一般資料驗(yàn)證,不會(huì)允許你去改用戶(hù)名的..
/*
對(duì)表增加一條記錄
*/
?public void addNode(UseInfoDto dto) {
??? UseInfo useinfo;
?try {
?? System.out.println("home=========="+home);
??? useinfo = home.create(dto.getName());
??? //useinfo.setName(dto.getName());
??? useinfo.setPassword(dto.getPassword());
??? System.out.println("調(diào)用 了addNode");
??? System.out.println("創(chuàng)建了新記錄為"+dto.getName()+":"+dto.getPassword());
?}
?catch (CreateException ex) {
?? ex.printStackTrace();
?? System.out.println("創(chuàng)建遠(yuǎn)程接口實(shí)例時(shí)出異常");
?}
這也和上面的一個(gè)道理,因?yàn)橹麈I字段不允許暴露給客戶(hù)setXXX方法,所以我們要?jiǎng)?chuàng)建一個(gè)create(主鍵)給客戶(hù)調(diào)用,這樣我們就可依我上面所做的方式創(chuàng)建一條記錄了,,
注意在ejbCreate(XXX)方法里要加上一句? setXXX(XXX);否則會(huì)報(bào)錯(cuò)的喲
因?yàn)閑jbCreate在服務(wù)器本地調(diào)用所以可以調(diào)用setXXX方法.
ok,祝旅途愉快!