2009-08-10 2 views
3

JDO를 사용하여 DataNucleus와 다 대 다 링크를 유지 관리하지 않습니다. 나는 두 클래스 인 BookShop을 가지고 있습니다.DataNucleus (JDO)의 다 대다 관계가 유지되지 않습니다.

<?xml version="1.0"?> 
<!DOCTYPE orm PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN" 
    "http://java.sun.com/dtd/orm_2_0.dtd"> 

<orm> 
    <package name="com.mypackage.pojo"> 
     <class name="Book" identity-type="datastore"> 
      <datastore-identity> 
       <column name="BOOK_ID" /> 
      </datastore-identity> 

      <field name="name"> 
       <column length="100" jdbc-type="VARCHAR" /> 
      </field> 

      <field name="shops" persistence-modifier="persistent" 
        table="BOOKS_SHOPS"> 
       <collection element-type="com.mypackage.pojo.Shop" /> 
       <join> 
        <column name="BOOK_ID" /> 
       </join> 
       <element> 
        <column name="SHOP_ID" /> 
       </element> 
      </field> 
     </class> 

     <class name="Shop" identity-type="datastore"> 
      <datastore-identity> 
       <column name="SHOP_ID" /> 
      </datastore-identity> 

      <field name="name"> 
       <column length="50" jdbc-type="VARCHAR" /> 
      </field> 

      <field name="books" persistence-modifier="persistent" 
        table="BOOKS_SHOPS"> 
       <collection element-type="com.mypackage.pojo.Book" /> 
       <join> 
        <column name="SHOP_ID" /> 
       </join> 
       <element> 
        <column name="BOOK_ID" /> 
       </element> 
      </field> 
     </class> 
    </package> 
</orm> 

내가 같이, 주변 상점과 다른 방법으로 책을 연결하려고 : 이것은 ORM 매핑 파일입니다

shop.addBook(book); 
book.addShop(shop); 

아무것도하지 않고 다시이 두 객체가 지속적 만들기 . 위의 작은 코드 스 니펫 이전과 이후에 모두 ObjectStatedetached-clean입니다.

내가 잘못 할 수 있습니까?

답변

4

나는 해결책이 있지만 모든 것을 완전히 이해하지 못하고 있음을 인정해야합니다. 마지막 field 요소가

<field name="books" persistence-modifier="persistent" table="BOOKS_SHOPS"> 

로 정의되지 않은 경우 상황이 작동하지만

<field name="books" persistence-modifier="persistent" mapped-by="shops"> 

이것은 내 문제를 해결했다.

JDO M-N Relationships의 DataNucleus 설명서를 참조하십시오. 그러나이 예제에서와 같이 joinelement 요소를 출력하지 않으면 작동하지 않습니다. DataNucleus 사이트의 또 다른 관련 링크는 JDO Guides : M-N Relation입니다. 이 마지막 예제의 코드는 SourceForge에서 찾을 수 있습니다. 불행히도,이 예제는 나를 위해 작동하지 않았다.

이 정말 좋은 답변 아니지만, 내가 지금 제공하는 모든 ... 이후

+2

"매핑-에 의해"일명 양방향 관계의 양면을 ... 상호 관계 필요하다. – DataNucleus