大鱼
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2009年10月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
统计
随笔 - 86
文章 - 0
评论 - 9
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
eclipse(2)
(rss)
EJB(11)
(rss)
hibernate
(rss)
html(1)
(rss)
j2ee(5)
(rss)
j2se(18)
(rss)
javascript(5)
(rss)
JBOSS(4)
(rss)
JPA(3)
(rss)
JSF(5)
(rss)
jsp(5)
(rss)
oracle(6)
(rss)
richfaces(2)
(rss)
spring(2)
(rss)
uml
(rss)
unix(1)
(rss)
操作系统(3)
(rss)
软件工程(13)
(rss)
随笔档案
2011年10月 (6)
2011年6月 (11)
2011年5月 (1)
2011年3月 (1)
2010年10月 (2)
2010年4月 (7)
2010年2月 (3)
2010年1月 (1)
2009年12月 (2)
2009年11月 (3)
2009年10月 (9)
2009年9月 (4)
2009年4月 (4)
2009年3月 (32)
收藏夹
JPA(2)
(rss)
图表(1)
(rss)
搜索
最新评论
1. re: JSF中隐藏A4J按钮和普通按钮的JS单击事件
....
--12
2. re: JSF中隐藏A4J按钮和普通按钮的JS单击事件
lll
--12
3. re: Java实现四则运算的解析收藏
2000+600/3-300*2+0.1 = 1599.9 ????
--lrklx
4. org.hibernate.HibernateException: identifier of an instance of cn.com.sinosoft.ebusiness.online.sale.domain.GeProposal was altered from 8906909140472133 to 000260802402288
axxz
--csa
5. re: 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
收藏了
--安多
阅读排行榜
1. org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(lineItems)](3675)
2. 如何写详细设计文档(3184)
3. EJB异常:identifier of an instance of net.model.entity.Role was altered from 2 to 0(2108)
4. FineReport调用Oracle数据库中的存储过程需要两步走(1989)
5. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序(1797)
评论排行榜
1. JSF中隐藏A4J按钮和普通按钮的JS单击事件(2)
2. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序 (1)
3. linux 配置jdk(1)
4. Java实现四则运算的解析收藏(1)
5. 在Eclipse中反编译Class文件完全详解(1)
ejb3笔记
hibernate_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
大鱼
阅读(210)
评论(0)
编辑
收藏
所属分类:
EJB
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
ejb3笔记
EJB3 QL查询
EJB调用存储过程
EJB3常见异常及解决
org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(lineItems)]
EJB异常:Cannot instantiate class:org.jnp.interfaces.NamingContextFactory
EJB异常:Collection has neither generic type or OneToMany.targetEntity() defined:
EJB3.x:部署(卸载)EntityBean时自动创建(删除)表结构
EJB异常:identifier of an instance of net.model.entity.Role was altered from 2 to 0
EJB3.x:关于@UniqueConstraint标记中的columnNames属性
Powered by:
BlogJava
Copyright © 大鱼