多对一(主键)关系,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关系。