<class name="hbm.pojo.Misuser" table="misuser" schema="informix" catalog="zzymis">
把catalog="zzymis"去掉就OK了。2、Hibrenate保存數(shù)據(jù)失敗
如果忘記提交事務(wù)會(huì)導(dǎo)致數(shù)據(jù)保存或者更新失敗,正確代碼如下:
HibernateSessionFactory. getSession().beginTransaction();
new hbm.pojo.StudySubjectDAO().merge(subject);
HibernateSessionFactory. getSession().flush();
HibernateSessionFactory. getSession().getTransaction().commit();
HibernateSessionFactory. getSession().beginTransaction();
new hbm.pojo.StudySubjectDAO().merge(subject);
HibernateSessionFactory. getSession().flush();
HibernateSessionFactory. getSession().getTransaction().commit();
3、Hibernate一對(duì)多的配置

































4、EJB中的getSingleResult()方法
查找返回一個(gè)結(jié)果,是唯一的一個(gè)結(jié)果,當(dāng)getSingleResult()個(gè)方法被調(diào)用時(shí)執(zhí)行查詢。如果沒(méi)有結(jié)果返回,這個(gè)方法將會(huì)拋出javax.persistence.EntityNotFoundException運(yùn)行異常.如果找到多于一個(gè)結(jié)果, javax.persistence.NonUniqueResultException異常將會(huì)在運(yùn)行期間拋出.因?yàn)檫@兩個(gè)異常都是RuntimeException,例子中的代碼不需要完整的try/catch塊。
5、Hibernate3的解決中文查詢問(wèn)題
如果直接把查詢的參數(shù)放到sql語(yǔ)句中是查不出來(lái)的,比如:
Query query=em.createQuery("select u from User u where u.name like '%"+myName+"%'");
可以使用占位符或者設(shè)置參數(shù)的方法來(lái)查詢,例如:
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+"%");
Query query=em.createQuery("select u from User u where u.name like '%"+myName+"%'");
可以使用占位符或者設(shè)置參數(shù)的方法來(lái)查詢,例如:
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 結(jié)尾的所有六個(gè)字母的名稱(如 Cheryl、Sheryl)。
like '[CK]ars[eo]n' :搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
like '[M-Z]inger' :搜索以字符串 inger 結(jié)尾、以從M到Z的任何單個(gè)字母開(kāi)頭的所有名稱如 。
like 'M[^c]%' :搜索以字母 M 開(kāi)頭,并且第二個(gè)字母不是 c 的所有名稱(如 MacFeather)。
like '[CK]ars[eo]n' :搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
like '[M-Z]inger' :搜索以字符串 inger 結(jié)尾、以從M到Z的任何單個(gè)字母開(kāi)頭的所有名稱如 。
like 'M[^c]%' :搜索以字母 M 開(kāi)頭,并且第二個(gè)字母不是 c 的所有名稱(如 MacFeather)。
7、一對(duì)多(one-to-many)刪除不掉
比如Main-to-Detail是one-to-many關(guān)系,在新增的時(shí)候可以通過(guò)persistMain()同時(shí)把多個(gè)Detail插入數(shù)據(jù)庫(kù),但是如果想刪除某個(gè)Main中的某幾個(gè)Detail時(shí),好像通過(guò)mergeMain()是無(wú)法做到的,通過(guò)mergeMain()可以更新Main的屬性,但是沒(méi)辦法刪除相應(yīng)的Detail,至少我是沒(méi)辦法做到。這時(shí),我一半都是寫(xiě)個(gè)方法單獨(dú)來(lái)刪除Detail,例如deleteDetailById()來(lái)一個(gè)個(gè)刪除。
8、查詢返回多個(gè)實(shí)體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);
……
}
@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、設(shè)置ID自增
在用netbean生成的實(shí)體Bean后,需要手工加上自增注釋(@GeneratedValue(strategy = GenerationType.AUTO))
例如:
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
例如:
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
10、failed to lazily initialize a collection of role
因?yàn)檠舆t加載導(dǎo)致的,但是我在EntityBean中使用fetch=FetchType.EAGER和FetchType.LAZY都無(wú)效,我的EntityBean是@OneToMany,最后只有在SessionBean的讀取EntityBean的方法中加入:
if(main.getDetails()!=null)
main.getDetails().size();
return main;
這樣總算解決問(wèn)題。
main.getDetails().size();
return main;