但Hibernate的文档可没这么说啊 ^_^

解决方案 »

  1.   

    > 1v1双向你究竟要实现什么呢
    通过Address对象能获取Person对象;删除Address对象时,也能删除与它关联的Person对象。其实我的真实场景是:
    有表Title与表Content,Title表示标题,Content表示详文。
    1个标题可以有0个或1个详文;1个详文必须与1个(且只能是1个)标题关联。
    当删除某个标题时,与该标题关联的详文也要被级联删除;当删除某个详文时,不影响与它关联的标题;
    通过标题(详文)对象能够得到与之详文(标题)对象。
      

  2.   

    我想,既然Hibernate文档中特别分明了"单向一对一"和"双向一对一",那么应该是可以实现的吧。
      

  3.   

    address.hbm.xml加下一句
    <one-to-one name="person" class="entity.TPerson" cascade="all" property-ref="TAddress"/>person.hbm.xml
       <many-to-one name="TAddress" class="entity.TAddress" fetch="select">
                <column name="addressid" />
       </many-to-one>  
    相信楼主看得明白.. 双向一对一是一定能成功的,我做过很多这样的例子
      

  4.   

    感谢楼上的回复。
    不过...你的配置与Hibernate中的配置没什么区别吧?文档中的两个hbm文件内容如下:
    <class name="Person">
        <id name="id" column="personId">
            <generator class="native"/>
        </id>
        <many-to-one name="address" 
            column="addressId" 
            unique="true"
            not-null="true"/>
    </class><class name="Address">
        <id name="id" column="addressId">
            <generator class="native"/>
        </id>
       <one-to-one name="person" 
            property-ref="address"/>
    </class>
      

  5.   

    刚才我实际测试了Hibernate文档中的那个例子,确实能够实现"双向一对一"。
    那我还是再检查一下自己应用中的映射文件吧。
      

  6.   

    fetch="select"
    查下这个用法
      

  7.   

    发现了一些有趣的东西了。
    Hibernate默认使用id字段进行关联。把Hibernate文档中的那个例子稍作修改:
    为Address表加一个字段--addressCode,该字段表示"业务"中的address标识符,而原来的addressId仅作为一个没有任务业务意义的代理主键。
    Person表的addressId则与addressCode进行关联。
    那么Person.hbm.xml中需要有如下语句:
    <many-to-one name="address" column="addressCode"
      property-ref="addressCode" unique="true" not-null="true" />而Address.hbm.xml中则有:
    <property name="addressCode" column="addressCode"
      type="java.lang.Long" length="20" />此时,再通过ID值获取Address对象时,会看到如下形式的SQL:
    select a.addressId, a.addressCode, p.personId, p.addressCode from Address a left outer join Person p on a.addressId=p.addressCode where a.addressId=?
    "a.addressId=p.addressCode",可以看到是Address中的addressId,而不是addressCode,与Person中的addressCode关联。很显然,这(很可能)无法查找出Person中的相关数据。
      

  8.   

    单向好像不是太好,细心看一下Hibernate的帮助文档,你就知道了!!!
      

  9.   

    虽说,可以把此处的"one-to-one"换成"one-to-many",但这并不是不使用"one-to-one"的理由吧 ^_^
      

  10.   

    今后的工程,死也不用hibernate了....自己封装操作层.....