一个关于ENTUTY BEAN的很矛盾的东西(不要误会,进来看就知道了)

04-03-11 henry.t
A,B两个CMP,A含有B的主键,也就是说A有一个字段是B的主键。

那么我建立这个CMP的时候,A因为和B有关系,关系字段就是B的本地接口,那么我和很多人讨论过,都说没有必要再保留CMP的B_ID字段了,建立CMP后删除它,以后要访问这个字段都访问关系字段就可以了。

那么现在有问题了,我一旦删除那个看起来多余的字段的话,ejbCreate这个方法里面就不会有字段B_ID,而这个字段是实实在在的在数据库表里面的,我新建A表记录的时候是显然要把这个参数传进去的,要不这个字段就会是NULL,但是ejbCreate方法里面已经不允许我这么做了,我该怎么办??

现在我就只有不删除那个多余的字段了,当然这个问题就解决了,但是这个结果怎么看怎么奇怪,FIELD里面有B_ID,而关系字段里面又有这个B,很多余阿

我就是想问问大家是怎么处理这个问题的,谢谢了,

banq
2004-03-11 15:08
大家说得是对的。

你不要将这个字段放在ejbCreate方法中就可以了啊。

henry.t
2004-03-12 01:38
那么现在有问题了,我一旦删除那个看起来多余的字段的话,ejbCreate这个方法里面就不会有字段B_ID,而这个字段是实实在在的在数据库表里面的,我新建A表记录的时候是显然要把这个参数传进去的,要不这个字段就会是NULL,但是ejbCreate方法里面已经不允许我这么做了,我该怎么办??

==========================

BANG老大,我说得很清楚了,也就是说,我建立这条记录的时候,这个字段应该有数据的,他表示的是和另外一个表的关系,是那个表的主键,这样做有错??难道你的意思是我先创建这条记录,让那个字段是NULL,然后我用SET关系的方法给这咯字段赋值?那不是要走两步??不觉得麻烦??你们一般是怎么做的?不能在创建的时候一并将关系也设置了吗

linxxtao
2004-03-12 10:43
在JBUILDER中运用至底向上的方法,让两个EJB自动建立关系,什么问题都解决了吧!

henry.t
2004-03-12 19:09
怎么就没有人直接告诉我怎么解决这个问题

henry.t
2004-03-14 02:55
请回答

banq
2004-03-15 12:30
不是不回答你,实在无法重现这个具体技术问题上,估计你的思路在哪里卡住了,我是一切OK的。

凤舞凰扬
2004-03-15 17:39
你的错误很明显的,是你的关系建错了。按照你的理解,在A中有B的主键,并且A的产生必定有这个值,意味着A是B的子表。呵呵,主表都没有产生,你子表可以产生么?(也就是你不赋这个ID的值一样可以生成实例,呵呵,这不是很明显地证明你关系错误了么!),自己好好看看吧,不要说别人不回答你的

henry.t
2004-03-16 10:47
你的错误很明显的,是你的关系建错了。按照你的理解,在A中有B的主键,并且A的产生必定有这个值,意味着A是B的子表。呵呵,主表都没有产生,你子表可以产生么?(也就是你不赋这个ID的值一样可以生成实例,呵呵,这不是很明显地证明你关系错误了么!),自己好好看看吧,不要说别人不回答你的

================================================================

好吧,算我表达没有很清楚,我重新说:

关系PEOPLE----COMPANY

PEOPLE{ PID,NAME,CID } COMPANY{ CID,NAME }

上面应该很清楚吧

好,我现在建立相应的CMP,注意,因为有一对多关系,PEOPLE.CID这个字段我会从CMP里面删掉,换成一个CMR字段COMPANY,这样做大家应该赞成吧,那么这样做的直接后果是:在CMP PEOPLE的EJBCREATE()方法里面,不会再出现CID这个字段了(JBUILDERX里面自动就这样),变成:

EJBCREATE( PID,NAME )

好了,这样当我创建PEOPLE的时候,PEOPLE.CID这个字段是NULL!我只好先让他这样,然后加一句类似:PEOPLE.SETCOMPANY( A_COMPANY )这样的设置关系的语句,才能建立关系并且使CID字段不为空,当然,这个CCOMPANY这个时候是存在的

我觉得这样的方法来新曾一个PEOPLE很烦,要分两部走,就想保留那个CID字段在CMP_PEOPLE里面,这样一来我就可以一条语句完成创建,但是会使CCMP_PEOPLE里面既有CID,又有COMPANY这个关系字段,显得多余

我的问题说清楚了吧,我就是想问大家,你们使怎么处理这个问题的?

huasen
2004-08-17 18:13
我做了一个项目也有这样的问题,你的意思是,每次你要在一个COMPANY下面加一个PEOPLE,那么必须在PEOPLE这个ENTITY BEAN 中用SETCOMPANY的方法,而且不能直接设置你那个CID的值,我感觉这样也很麻烦,而且我每次设置PEOPLE都要通过调用那个SETCOMPNAY方法,而且要把属于这个COMPANY 的所有PEOPLE全部加进去,包括以前我已经加在数据库里面的那些数据,要不然,如果我每次只加新的属于这个COMPANY 的PEOPLE 的话,以前在数据库中的属于这个COMPANY 的PEOPLE那些记录里面的CID字段全部都为空了,这个WENLOGIC对数据库里面数据的同意管理,然后这样我觉得做程序效率不行,每次我要加一些属于某个COMPANY的PEOPLE的时候,总要把以前加进去的先读出来,和现在要加的放在同一个ARRAYLIST里面,一起加进去,这样效率很底,每次都要把数据库翻一次。

你说你是不是这个意思!

猜你喜欢