多对一(主键)关系,create问题

04-06-01 bclzcl
我创建了两个实体bean,关系为多对一,在多的实体create时,报错:

"javax.ejb.EJBException: When a cmp-field and a cmr-field (relationship) are mapped to the same column, the setXXX method for the cmp-field may not be called. The cmp-field is read-only."

然后上网查发现问题是:

当你希望在CMP中定义一个Many-to-One Relationships指向另一个CMP的PK字段时,这个cmp field不能使用setXXX方法更新。在WLS和EJB 2.0规范的10.3.1部分已经提到了这一点。

网上有个文章给了解决方法:

解决:

1)在ejbCreate方法中设置除关联字段以外的其它所有字段值

2)通过relations CMP filed的值用ejbPostCreate方法找到relations CMP ejb

3) 用找到的CMP ejb去设置关联字段的值

以下代码是在相关entity EJB中调用ejbPostCreate方法设置字段值的例子:

  public void ejbPostCreate(String id, String name, String type) throws CreateException {

  ……

  try{

  Context ctx = new InitialContext();

  TypeInfoHome tih = (TypeInfoHome)ctx.lookup("TypeInfo");

  //This is the relations CMP EJB home

  ……

  TypeInfo ti= tih.findByPrimaryKey("1");

  // find the relations CMP EJB object.

  ……

  this.setTypeInfo(ti);

  }catch(Exception e){

  System.out.println("_______________________________________");

  e.printStackTrace();

  }

  ……}

可例子中要设置的字段直接给了一个数值:1,TypeInfo ti= tih.findByPrimaryKey("1");

但我是由客户提供的数值,如下拉中选择的,那么提交时

我如何把另一个bean的键值传给这个bean的ejbPostCreate呢,

各位仁兄能否给个具体的做法!!!!!!!!

banq
2004-06-01 18:52
这种问题我的解决方式是更改数据库设计,一定是将一个表的辅键和另外一个表的主键建立CMR关系。

猜你喜欢