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

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

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

    大魚

    ejb3筆記

       1、用MyEclipse通過連接到數據庫,可以生成Hibernate需要的POJO和對應的映射文件。但是我生成的hbm.xml有問題,會報錯"could not load an entity"。后來找到了元兇
    <class name="hbm.pojo.Misuser" table="misuser" schema="informix" catalog="zzymis">
    把catalog="zzymis"去掉就OK了。

       2、Hibrenate保存數據失敗
       如果忘記提交事務會導致數據保存或者更新失敗,正確代碼如下:
       HibernateSessionFactory. getSession().beginTransaction();
       
    new hbm.pojo.StudySubjectDAO().merge(subject);
       HibernateSessionFactory. getSession().flush();
       HibernateSessionFactory. getSession().getTransaction().commit();

       3、Hibernate一對多的配置
    最好使用雙向關聯(假設Main->Detail)
    1)Main.java中加入:
       
    private Set< Detail > detail=new HashSet();
       然后加入get()和set()方法;
    2)Detail.java中加入:
       
    private Main main;
       然后加入get()和set()方法;另外別忘了重寫equals()方法
        
    public boolean equals(Object object) {
            
    if (object == null || !this.getClass().equals(object.getClass())) {
                
    return false;
            }

            Detail other 
    = (Detail)object;
            
    if(other.id==null||this.id==null)
                
    return false;
            
    if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) 
            
    return false;
            
    return true;
        }

    3)Main.hbm.xml中加入:
       
    <set name="detail" inverse="true" cascade="all">
             
    <key column="mainId"></key>
             
    <one-to-many class=" Detail"/>
       
    </set>
    4)Detail.hbm.xml中加入:
       
    <many-to-one name=" main " class=" Main" column=" mainId">
       
    </many-to-one>
       同時把mainId對應的
    <property>……</property>刪掉
    5)操作:
       雙向設置:(調用setMain()setDetail())

       4、EJB中的getSingleResult()方法
        查找返回一個結果,是唯一的一個結果,當getSingleResult()個方法被調用時執行查詢。如果沒有結果返回,這個方法將會拋出javax.persistence.EntityNotFoundException運行異常.如果找到多于一個結果, javax.persistence.NonUniqueResultException異常將會在運行期間拋出.因為這兩個異常都是RuntimeException,例子中的代碼不需要完整的try/catch塊。

       5、Hibernate3的解決中文查詢問題
       如果直接把查詢的參數放到sql語句中是查不出來的,比如:
       Query query
    =em.createQuery("select u from User u where u.name like '%"+myName+"%'"); 
       可以使用占位符或者設置參數的方法來查詢,例如:
       
    1)Query query=em.createQuery("select u from User u where u.name like ? "); 
         query.setString(
    0,"%"+myName+"%");
       
    2)Query query=em.createQuery("select u from User u where u.name like :name");
         query.setString("name","
    %"+myName+"%");

       6、Like的其他用法(正則)
       like '_heryl' :搜索以字母 heryl 結尾的所有六個字母的名稱(如 Cheryl、Sheryl)。
       
    like '[CK]ars[eo]n' :搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
       
    like '[M-Z]inger' :搜索以字符串 inger 結尾、以從M到Z的任何單個字母開頭的所有名稱如 。
       
    like 'M[^c]%' :搜索以字母 M 開頭,并且第二個字母不是 c 的所有名稱(如 MacFeather)。 

       7、一對多(one-to-many)刪除不掉
       比如Main-to-Detail是one-to-many關系,在新增的時候可以通過persistMain()同時把多個Detail插入數據庫,但是如果想刪除某個Main中的某幾個Detail時,好像通過mergeMain()是無法做到的,通過mergeMain()可以更新Main的屬性,但是沒辦法刪除相應的Detail,至少我是沒辦法做到。這時,我一半都是寫個方法單獨來刪除Detail,例如deleteDetailById()來一個個刪除。
     
       8、查詢返回多個實體Bean
       1)查詢(省略后的代碼)
       @PersistenceContext(unitName
    ="crm")
       
    private EntityManager em;
       
    public List getUserinfoTrace(){
        
    return em.createQuery("select new List(u,t)  from Userinfo u,Trace t where u.id=t.id").getResultList();
       }
       
    2)讀取(省略后的代碼)
       List
    <List> result=(List<List>)remote.getUserinfoTrace();
       
    for(List obj:result){
          Userinfo userinfo
    =(Userinfo)result.get(0);
          Trace trace
    =(Trace)result.get(1);
          ……
       }

       9、設置ID自增
    在用netbean生成的實體Bean后,需要手工加上自增注釋(@GeneratedValue(strategy = GenerationType.AUTO)
    例如:
    @Id
    @Column(name 
    = "id", nullable = false)
    @GeneratedValue(strategy 
    = GenerationType.AUTO)
    private Integer id;

       10、failed to lazily initialize a collection of role
       因為延遲加載導致的,但是我在EntityBean中使用fetch=FetchType.EAGER和FetchType.LAZY都無效,我的EntityBean是@OneToMany,最后只有在SessionBean的讀取EntityBean的方法中加入:
       if(main.getDetails()!=null)
          main.getDetails().size();
       
    return main;
       這樣總算解決問題。

    posted on 2009-10-20 12:34 大魚 閱讀(222) 評論(0)  編輯  收藏 所屬分類: EJB

    主站蜘蛛池模板: 大地资源网高清在线观看免费 | www免费黄色网| 色五月五月丁香亚洲综合网| 亚洲最大无码中文字幕| 亚洲区视频在线观看| 亚洲国产中文在线视频| 亚洲情A成黄在线观看动漫软件| 亚洲国语在线视频手机在线| 亚洲另类自拍丝袜第1页| 亚洲综合色丁香麻豆| 亚洲成人黄色网址| ass亚洲**毛茸茸pics| 亚洲男人天堂2022| 亚洲av综合av一区二区三区 | 久久久无码精品亚洲日韩按摩 | 亚洲人成在久久综合网站| 亚洲婷婷综合色高清在线| 午夜在线a亚洲v天堂网2019| 久久久久久国产精品免费免费男同 | 国产精品成人免费综合| 免费国产a国产片高清| 亚洲一区二区高清| 亚洲大成色www永久网站| 久久精品国产亚洲AV高清热| 亚洲短视频在线观看| 亚洲一区二区三区丝袜| 日韩亚洲综合精品国产| sss在线观看免费高清| 久久精品国产免费| 国产精品久久永久免费| 日韩精品视频免费观看| 亚洲精品视频免费观看| 亚洲成AV人在线播放无码| 亚洲手机中文字幕| 亚洲av无码专区在线电影| 国产成人精品免费视频大全| 91成人在线免费观看| 无码人妻精品一二三区免费 | 2021国内精品久久久久精免费| 成人免费视频77777| 免费看一级做a爰片久久|