这个是CMR的关系,在customer表里是不存在的。但你要在address表里指定一个column来表示它是属于那个customer的。

解决方案 »

  1.   

    多谢回复,我的意思是说,在customer表中保留address的信息,用customer来引用address,这个CMR我是在customerEjB中建立的,在customerEJB Bean中有abstract void setCustoaddress和abstract  getCustoaddress 抽象方法,我的意思是难道一定要在customer表中一定要有一个允许为null的字段来建立与address表的联系吗?而且这个自段总为null?  而且如果建立了联系,我怎样用customer这个CMR域来查找相联系的address呢?
      

  2.   

    多谢回复,我的意思是说,在customer表中保留address的信息,用customer来引用address,这个CMR我是在customerEjB中建立的,在customerEJB Bean中有abstract void setCustoaddress和abstract  getCustoaddress 抽象方法,我的意思是难道一定要在customer表中一定要有一个允许为null的字段来建立与address表的联系吗?而且这个自段总为null?  而且如果建立了联系,我怎样用customer这个CMR域来查找相联系的address呢?
      

  3.   

    一对一的关系和数据库中具体的实现方法是可以分开的,你可以在customer表中定义指向address的外键,也可以在address表中定义指向customer的外键。你在customerEJB中定义了cmr,是在ejb的层次上定义了customer保留address的引用,而具体的数据库方法有前面提到的两种。用jboss在jbosscmp-jdbc.xml指定你具体的实现方式
      

  4.   

    多谢,那就是说这个在customer中的保留address信息的column是确实存在了,而不是虚拟的,在数据库的层次上,这个column可以写成 address_id, 那问题是如果我往customer存入一条数据,那这个address_id也被赋予一个int型的值,但是相应的addressEJB呢?他会自动生成一个addressEJB和这个address_id对应吗?如果生成了address,也就是说我没创建一个customerEJB就一定要同时创建一个addressEJB?
      

  5.   

    customer中存入一条记录的时候,address_id应该为空(address_id应该是允许空的),怎么会自动生成addressEJB呢?你要创建一个AddressEJB,然后调用customerEJB的setCustoaddress方法,将创建的addressEJB作为参数,这样两者之间的一对一关系才建立起来啊。
      

  6.   

    数据库中不需要什么多的字段了,ejb中的联系,是在xml文件中声明,由容器自动管理的。
    应该是这样。我也有问题,容器管理这关系,有没有很多限制?
    比如:
    customer和address对应数据建立的先后有没有限制?
    如联系的两个表的字段是主键和非主键时,有什么限制?
    需要调用A.setB(B)不?什么时候调用?
      

  7.   

    to idonotknowmuch(butiknowiloveyou:  是不是每个CustomerEJB的这个address_id域都不应该是null?因为如果是null,等于根本没有建立起来它们之间的关系?我的意思就是说:每次生成一个customerEJB(存入一条纪录),就应该(且必须)调用一次setCustomeraddress方法,而且同时应该给这个address_id符一个相应的值?那问题是以后如何根据这个addrss_id(int型的)找到相应的AddressEJB呢?或者说我如何利用这个CMR关系?
    我在the serverside.com上看到CMR的EJB-Ql:select object(c) from c.customeraddress.homeaddress         其中customeraddress是CMR联系域,关键是我调用这个语句后返回的是个Collection?to beyondhuangjie(盖茨·比尔):   你是说customer中可以用一个已有的字段来做这个column吗?这个字段不一定是int型的吗?
    >>>customer和address对应数据建立的先后有没有限制?
    如果B依赖于A,就是说只有生成了A才有B,没有A就没有B的话,可以把setB方到ejbPostCreate方法中,并设置相应的cascade
      

  8.   

    lyo(一个人的路上) :
    那问题是以后如何根据这个addrss_id(int型的)找到相应的AddressEJB呢?
    ---------------------------------------------------------------
    你现在要做的是操作entity bean而不是操作数据库,你用customer表中的address_id对应address表的id建立对应关系。在bean中使用get set方法来设置和找到关系,getCustoaddress方法得到就是addressEJB的remote或者local接口(也就是你已经得到了addressEJB了)。同样set方法也是用addressEJB的local或者remote接口作为参数的
    ~~~~~~
    ~~~~~~
      

  9.   

    多谢:   你后来的话我理解了。不过:select object(c) from c.customeraddress.homeaddress 返回的是个什麽呢?是address接口还是customer接口?这里需要返回个address的远程接口,来操纵address,但是这个方法是写在customer中的,按照规范应该返回个customer接口啊?
      

  10.   

    up
    多谢:   你后来的话我理解了。不过:select object(c) from c.customeraddress.homeaddress 返回的是个什麽呢?是address接口还是customer接口?这里需要返回个address的远程接口,来操纵address,但是这个方法是写在customer中的,按照规范应该返回个customer接口啊?
      

  11.   

    select object(c) from c.customeraddress.homeaddress 这个语句有问题
      

  12.   

    你可以把
    select object(c) from c.customeraddress.homeaddress 
    看成是返回一个home接口的集合