<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0
    實體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動作,先在本地執行一遍,然后遠程執行遠程的,這樣就可以同步了,不過我覺得如果是網絡允許的情況下,還是每次對對象操作后都能返回最新的對象好一些,免得手工去保持和遠程對象的同步,這樣不可靠.
     一對多目前只看到了這么多,接下來要看一下多對多的情況.


    盡管千里冰封
    依然擁有晴空

    你我共同品味JAVA的濃香.
    posted on 2007-09-14 09:33 千里冰封 閱讀(798) 評論(0)  編輯  收藏 所屬分類: JAVAEE
    主站蜘蛛池模板: 97久久国产亚洲精品超碰热| 亚洲xxxx视频| 国拍在线精品视频免费观看 | 美女视频黄的全免费视频网站| 亚洲人成自拍网站在线观看| 高清在线亚洲精品国产二区| a毛片在线看片免费| 亚洲AV无码一区二区三区在线| 亚洲&#228;v永久无码精品天堂久久 | 青青青国产免费一夜七次郎| 九九九国产精品成人免费视频| 久久亚洲精品无码| 国产成人涩涩涩视频在线观看免费| 国产线视频精品免费观看视频| 亚洲免费人成视频观看| 亚洲综合亚洲综合网成人| 91在线视频免费看| jizz日本免费| 亚洲午夜无码久久| 亚洲成色www久久网站夜月| 最近免费中文字幕大全视频 | 久久国产成人精品国产成人亚洲| 18pao国产成视频永久免费| 男人扒开添女人下部免费视频| 亚洲精品美女在线观看| 亚洲精品网站在线观看不卡无广告| 久久久久久精品免费看SSS| h视频在线观看免费| 亚洲熟妇无码一区二区三区导航| 国产亚洲成av片在线观看| 国产免费怕怕免费视频观看| 精品无码无人网站免费视频| 一区二区三区在线免费| 亚洲国产精品成人综合色在线| 91亚洲国产成人久久精品网站| 亚洲精品成人区在线观看| 成人男女网18免费视频| 99re在线视频免费观看| 国产免费久久久久久无码| 国产精品亚洲а∨无码播放麻豆| 亚洲乱码无限2021芒果|