氟塑料離心泵www.buybeng.com

          jquery教程http://www.software8.co/wzjs/jquery/

          Hibernate annotation配置方式的MappedBy使用詳解

          說是使用詳解,其實是我自己做了一些簡單的試驗.如有說錯,請指正.

          Annotation方式的MappedBy其實就是xml方式的inverse

          http://stackoverflow.com/questions/10082434/mappedby-and-inverse-attributes-are-same 寫道
          In case of one-one or one-many or many to one, the key will be stored in one of the entites. It does not make any sense to store it in 2 places.
          It essential tells hibernate that the key is at the other end of the relationship.
          So if there are entities A and B which have a one to one relationship, and you see the mappedBy attribute in A, then the foreign key (which points to A) is stored in B.

          但是對于他們的行為 我一直不是很了解 hibernate里的doc解釋也不是很清楚:

          寫道
          inverse 映射屬性究竟表示什么呢?對于你和 Java 來說,一個雙向關(guān)聯(lián)僅僅是在兩端簡單地正確設(shè)置引用。然而,Hibernate 并沒有足夠的信息去正確地執(zhí)行 INSERT 和 UPDATE 語句(以避免違反數(shù)據(jù)庫約束),所以它需要一些幫助來正確的處理雙向關(guān)聯(lián)。把關(guān)聯(lián)的一端設(shè)置為 inverse 將告訴 Hibernate 忽略關(guān)聯(lián)的這一端,把這端看成是另外一端的一個鏡象(mirror)

          其實簡單點說 就是MappedBy確定"維護關(guān)系"的一方,也僅僅是"維護關(guān)系"而已.其他的操作不影響.

          實驗環(huán)境:hibernate 3.6.10.Final

          實體類:User(多方) Classroom(一方) Many-to-One的測試

           

          Java代碼: 
          1. //多方:  
          2.     @ManyToOne(cascade=CascadeType.ALL)  
          3.     @JoinColumn(name="cid")  
          4.     public Classroom getClassroom() {  
          5.          return classroom;  
          6.     }  
          7.     public void setClassroom(Classroom classroom) {  
          8.          this.classroom = classroom;  
          9.     }  
          Java代碼 :
          1. //一方  
          2.     @OneToMany(mappedBy="classroom")  
          3.     public Set<User> getUsers() {  
          4.         return users;  
          5.     }  
          6.     public void setUsers(Set<User> users) {  
          7.         this.users = users;  
          8.     }   



           

          從多方插入就不再累述了.

          這里就試著從不維護關(guān)系的一方來插入:

          Java代碼:  
          1. User user=new User();  
          2. user.setUname("cc");  
          3. user.setUpass("pass");  
          4. Classroom cr=new Classroom();  
          5. cr.setClassname("class one");  
          6.   
          7. Set<User> users=new HashSet<User>();  
          8. users.add(user);  
          9. cr.setUsers(users);  

           這樣只有一條插入語句:

          Hibernate: insert into Classroom (cname) values (?)

          為了更好地說明問題,我把以上一方的配置進行修改

          加入了 cascade=CascadeType.ALL

          同樣執(zhí)行以上代碼 顯示插入了兩條:

          Hibernate: insert into Classroom (cname) values (?)

          Hibernate: insert into User (cid, uname, upass) values (?, ?, ?)

          但是查看數(shù)據(jù)庫就會發(fā)現(xiàn):



           

          雖然插入了..但是外鍵卻沒有值

          一方不維護關(guān)系就可以明顯的看出來,

          但是一方的其他不影響關(guān)系的更新操作是沒有問題的:

          Java代碼:  
          1. Classroom cr=(Classroom)session.get(Classroom.class1);  
          2. System.out.println(cr.getUsers().iterator().next().getUname());  
          3. cr.getUsers().iterator().next().setUname("XX");  

           執(zhí)行以上的代碼:

          顯示:

          Hibernate: select classroom0_.cid as cid1_0_, classroom0_.cname as cname1_0_ from Classroom classroom0_ where classroom0_.cid=?

          Hibernate: select users0_.cid as cid1_1_, users0_.uid as uid1_, users0_.uid as uid0_0_, users0_.cid as cid0_0_, users0_.uname as uname0_0_, users0_.upass as upass0_0_ from User users0_ where users0_.cid=?

          cc

          Hibernate: update User set cid=?, uname=?, upass=? where uid=?

          數(shù)據(jù)在數(shù)據(jù)庫里也被正常更新

          這樣一番實驗坐下來就可以很清楚的感覺到

          mappedBy只是確定了由誰來維護關(guān)系而已 其他的操作并不影響.

           

          一般情況下 如果要讓兩方都可以維護關(guān)系 我自己是在OneToMany后寫JoinColumn 然后和ManyToOne里的外鍵列名取一樣的。

          當(dāng)然也可以不寫JoinColumn 來生成一個第三方表記錄關(guān)系 但這樣做沒什么必要 相同的關(guān)系會被存兩次.
          原文鏈接:http://www.software8.co/wzjs/java/3296.html

          posted on 2013-03-11 09:17 你爸是李剛 閱讀(5059) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2013年3月>
          242526272812
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          技術(shù)網(wǎng)站

          行業(yè)網(wǎng)站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          站長網(wǎng) 氟塑料離心泵 注塑機 液晶廣告機
          主站蜘蛛池模板: 根河市| 汝南县| 怀远县| 司法| 曲麻莱县| 轮台县| 涪陵区| 灵璧县| 屏东市| 石家庄市| 枣庄市| 芦山县| 凤冈县| 石泉县| 佛教| 陵川县| 班戈县| 双牌县| 灵宝市| 拜泉县| 葵青区| 泽库县| 商丘市| 普兰店市| 奈曼旗| 阜宁县| 曲周县| 兴山县| 嘉峪关市| 扶沟县| 汽车| 象山县| 盐津县| 顺义区| 闽清县| 枣庄市| 利川市| 两当县| 额济纳旗| 武平县| 沙洋县|