Dojo
最新
最佳
搜索
订阅
解道Jdon
领域驱动设计
架构设计
热点话题
产品经理
GitHub开源免费源代码
RUST语言
go语言文章排行榜
DevOps文章排行榜
认知偏差与谬论
数据科学
数据工程
幽默模因
更多话题
请教一个诡异的ejb3问题
11-04-28
codershall
请教一个ejb3的问题:
我的程序环境是weblogic、ejb3、openjpa
现在遇到一个诡异的问题:
我定义了一个实体A
class A {
Long id;
String name;
@
Transient
Map map;
}
当我用entityManager的接口根据id取出一个实体A的数据
A a = entityManager.find(A.class, 1);
然后我往A的map属性put一些值:
a.map.put("name", "test");
当我把实体a返回给web客户端(通过远程接口)时,
web得到的实体a只有id和name之类属性有值,而map没有值。
我开始以为是@
Transient
注解的原因,但是当我在A的构造函数里,new一个map,然后put数据进去,然后返回给web客户端,web拿到的实体a的map却是有值的。
class A {
Long id;
String name;
@
Transient
Map map;
A(){
map = new HashMap();
map.put("name", "test");
}
}
这样put,web客户端拿到的实体的map属性有数据。
请问各位大侠,这是什么原因啊?
是不是我某些地方用错了?
banq
2011-04-29 16:29
远程需要序列化,所以用Transient的字段就不会传送。
至于你的构造函数中赋值,大概这个对象可能被克隆或创建过一次。
codershall
2011-05-01 18:28
这个只是Transicent注解,不是transient修饰符,所以是可以远程传送的。
调试发现这些类似乎都是被openjpa增强过的类,类名统一都在原类名之前还有openjpa的前缀:org.xxx.openjpa.xxx.原始类名
现在我要在返回web客户端之前手动clone一下整个对象,才能正常传送到web客户端,很诡异,不知道是啥原因……
猜你喜欢
本站原创
《复杂软件设计之道:领域驱动设计全面解析与实战》
其他人在看