`
lbfhappy
  • 浏览: 81646 次
社区版块
存档分类
最新评论

EJB初学日记(6)

阅读更多
实体BEAN的关联

今天自己写了一个例子,有关实体BEAN的关联问题,我写的这个例子是一对多的情况,一是人,多是狗,一个人可以养多条狗,每条狗都必须有一个主 人,在删除主人的时候,狗就没有存在的必要了,所以狗也要跟着删除,可是删除狗的时候,主人却可以在.一开始我实现的时候,删除狗的操作是错误的,我以为 直接把Person里面的Dog删掉,然后更新Person就可以了,谁知不是这样的,你在增加了Person中的狗的时候,你更新Person就可以把 狗加进来了,可是当你把Person里面的狗删除掉时,再更新Person,数据库里面的狗却不会少.而要你显示的调用em.remove()去删除你想 删除的狗,并且你对这狗不能设置为级联删除,否则你删除狗的时候把人也删掉了,这当然不是我们希望看到的.

下面附上代码

<!---->package com.hadeslee.session;   
   
 
import com.hadeslee.entity.Person;   
 
import java.util.List;   
 
import javax.ejb.Remote;   
   
   
 
/**  
  * This is the business interface for PersonDAO enterprise bean.  
 
*/  
 @Remote  
 
public interface PersonDAORemote {   
    
public void insertPerson(Person p);   
    
public List getAllPersons();   
    
public Person findPerson(long id);   
    
public void deletePerson(long id);   
 }   

<!----> package com.hadeslee.session;   
   
 
import com.hadeslee.entity.Dog;   
 
import com.hadeslee.entity.Person;   
 
import java.util.List;   
 
import javax.ejb.Remote;   
   
   
 
/**  
  * This is the business interface for PersonToDogs     enterprise bean.  
  
*/  
 @Remote  
public interface PersonToDogsRemote extends PersonDAORemote{   
     
public void addDog(Person p,Dog dog);   
     
public Person removeDog(Person p,Dog dog);   
     
public List getDogs(Person p);   
     
public Person getOwner(Dog dog);   
 }   

<!---->   /*  
   * PersonDAOBean.java  
   *  
   * Created on 2006年12月13日, 下午3:53  
   *  
   * To change this template, choose Tools | Template Manager  
   * and open the template in the editor.  
   
*/  
    
  
package com.hadeslee.session;   
    
  
import com.hadeslee.entity.Person;   
import java.util.List;   
 
import javax.ejb.Stateful;   
import javax.persistence.Query;   
 
import javax.persistence.EntityManager;   
 
import javax.persistence.PersistenceContext;   
   
 
/**  
  *  
  * 
@author lbf  
  
*/  
 @Stateful  
public class PersonDAOBean implements com.hadeslee.session.PersonDAORemote {   
   @PersistenceContext  
    
protected EntityManager em;   
  
/** Creates a new instance of PersonDAOBean */  
    
public PersonDAOBean() {   
    }   
  
    
public void insertPerson(Person p) {   
       em.persist(p);   
       System.out.println(
"保存成功");   
   }   
 
    
public List getAllPersons() {   
      Query query
=em.createQuery("select p from Person p order by p.id");   
          
return query.getResultList();   
    }   
   
     
public Person findPerson(long id) {   
        
return em.find(Person.class,id);   
       }   
       
public void deletePerson(long id){   
         em.remove(em.find(Person.
class,id));   
     }   
     
}  

<!---->   1.  /*  
   2.  * PersonToDogsBean.java  
   3.  *  
   4.  * Created on 2006年12月13日, 下午4:50  
   5.  *  
   6.  * To change this template, choose Tools | Template Manager  
   7.  * and open the template in the editor.  
   8.  
*/  
   
9.   
  
10package com.hadeslee.session;   
  
11.   
  
12import com.hadeslee.entity.Dog;   
  
13import com.hadeslee.entity.Person;   
  
14import java.util.List;   
  
15import javax.ejb.Stateless;   
  
16import javax.persistence.Query;   
  
17.   
  
18/**  
  19.  *  
  20.  * 
@author lbf  
  21.  
*/  
  
22. @Stateless  
  
23public class PersonToDogsBean extends PersonDAOBean implements com.hadeslee.session.PersonToDogsRemote {   
  
24.        
  
25.     /** Creates a new instance of PersonToDogsBean */  
  
26.     public PersonToDogsBean() {   
  
27.     }   
  
28.   
  
29.     public void addDog(Person p, Dog dog) {   
  
30.         p.addDog(dog);   
  
31.         em.merge(p);   
  
32.     }   
  
33.   
  
34.     public Person removeDog(Person p, Dog dog) {   
  
35.         //em.remove(dog);   
  36.         p.removeDog(dog);   
  
37.         System.out.println("此时P的大小是:"+p.getDogs().size());   
  
38.         em.merge(p);   
  
39.         return p;   
  
40.     }   
  
41.   
  
42.     public List getDogs(Person p) {   
  
43.         return p.getDogs();   
  
44.     }   
  
45.   
  
46.     public Person getOwner(Dog dog) {   
  
47.         Query query=em.createQuery("select p from Person p where p.id=?1");   
  
48.         query.setParameter(1,dog.getOwner().getId());   
  
49.         return (Person)query.getSingleResult();   
  
50.     }   
  
51.        
  
52. } 
目前的代码是不能正常删除的,要正常删除狗的话,必须把em.remove() 那句话还原,然把再把em.merge()那句话注释起来才行 还有一个现象,那就是我在对远程对象进行了操作以后,并不会反映到我的本地对象,比如我调用了删除人里面的一条狗,在远程或者在数据库里面确实是删 掉了,可是我在调用人的时候,里面还是有那么的狗,这样就会产生不同步的现象,为了消除这种现象,我把接口写了一个,改为进行了删除操作的时候,它会再次 返回Person对象,这个时候就可以保证远程对象和本地对象的一致性了. 增加代码没写,所以每次增加了狗后,调用Person对象时,依然是增加前一样的,也就是说,当我持有了远程对象发过来的本地对象后,如果我不对其 进行操作,无论你怎么调用远程方法,此方法会对其有影响的,JVM都不会返回一个最新的给你,而你用的永远是第一次传过来的那个以象,所以,在远程对象传 输中,必须要注意同步性,要么就每次都从远程去取最新的对象,要么就先对本地对象做同样的操作,比如前面的addDog动作,先在本地执行一遍,然后远程 执行远程的,这样就可以同步了,不过我觉得如果是网络允许的情况下,还是每次对对象操作后都能返回最新的对象好一些,免得手工去保持和远程对象的同步,这 样不可靠.
 一对多目前只看到了这么多,接下来要看一下多对多的情况.
分享到:
评论

相关推荐

    EJB初学者PPT及JBOSS包下载

    EJB初学者的列子,JBOSS包等的下载

    EJB初学教程分章节示例代码

    EJB初学教程分章节示例,分几个层次学习,适合初学者学习实验

    EJB初学者常有的十一个疑惑

    EJB初学者常有的十一个疑惑 EJB与JAVA BEAN的区别?  答:Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如...

    ejb3.0初学者必看

    ejb3.0教材,适合ejb初学者阅读!

    JMS的使用范例,EJB初学者必看

    本源代码主要向EJB初学者介绍JMS的使用,如何创建和初始化一个请求Requestor对象、如何初始化请求Requestor对象、如何建立一个会话和发送请求、如何打印出请求的过程信息、如何接受由反馈者replier发回的消息等。

    初学JAVA,JAVAEE 6者的EJB资料

    EJB初学者的10大误区,学习EJB必知道的。EJB3.0的特性等等。喜欢的朋友下下看看。

    ejb初学者的教程太太突然问题 特瑞

    ejb的教程,挺不错的,大家不妨看看,保证有收获

    精通EJB第三版

    第1篇对EJB编程基础进行介绍,它概要性地对EJB进行了阐述,无论是EJB初学者,还是资深EJB专家,这部分内容都值得阅读;第2篇重点关注EJB编程的具体内容和过程,其中,研究了如何开发如下三种EJB组件:会话Bean、实体Bean和...

    ejb\ejb3.0实例教程

    本教程适合具有Java 语言基础的EJB初学者。随着EJB3的发展,EJB2 将会逐步成为历史!!!!!1

    EJB3.0中文 版

    本教程适合具有Java 语言基础的EJB 初学者。有读者来邮件问需不需要先学EJB2.0,作者明确地告诉你不用 学了。随着EJB3 的发展,EJB2 将会逐步成为历史。

    实战EJB 实战EJB 实战EJB

    实战EJB 实战EJB 实战EJB 电子书 pdf

    EJB3最新学习教程,适合初学者

    最新EJB学习教程,适合初学者学习掌握,讲解比较精辟,

    EJB 2.0企业级应用程序开发 PDF 下载

    本书内容翔实、深入浅出,提供了详细的讨论和实例,对于懂Java语言的EJB初学者是一本有益的指导书。本书所附光盘包括:WebLogic Server 6.1的试用版、WebGain's VisualCafe 4.5的试用版、 WebGain's TopLink 3.5.1的...

    EJB方面 ejb pdf

    EJB方面EJB方面EJB方面EJB方面EJB方面

    ejb开发使用手册,非常适合初学者

    ejb开发技术使用手册,初学者非常适合,内容详细,有案例,有重点,使用步骤明确!为ejb开发做了详细的步骤总结!

    ejb 学习笔记6

    经典资料+个人心得,希望大家能喜欢

    EJB集群EJB集群资料

    EJB集群资料EJB集群资料EJB集群资料EJB集群资料

    ejb3课堂笔记,适合初学者

    EJB3课堂笔记,通俗易懂,很简洁,PDF格式

    简单的ejb实例,Java初学实例

    一个简单的Stateless Session Bean的例子,里面主要实现一个与时间有关的... 同时编写了一个客户端测试程序,展现的是一个简单的Stateless Session Bean的实现过程,希望能够对复杂的EJB的开发起一些抛砖引玉的作用。

    Java EJB 3.0实例教程 企业应用开发核心技术 PDF

    期待已久的EJB3.0最终规范已经发布了。虽然EJB3.0 最终规范出来...本教程适合具有Java 语言基础的EJB初学者。有读者来邮件问需不需要先学EJB2.x,作者明确地告诉你不用学了。随着EJB3的发展,EJB2.x将会逐步成为历史。

Global site tag (gtag.js) - Google Analytics