2012-04-08 2 views
3

ActiveObjects에서 같은 테이블에 두 개의 OneToMany 관계를 쓰려면 어떻게해야합니까? 이 테스트 사례가 실패하는 이유는 무엇입니까?ActiveObjects에서 동일한 테이블에 두 개의 OneToMany 관계를 쓰는 방법

간단한 메시지 엔터티.

import net.java.ao.Entity; 

public interface Message extends Entity{ 
    public void setSender(Communicator sender); 
    public void setAcceptor(Communicator acceptor); 
} 

간단한 커뮤니 케 이터 (개인 또는 서버).

import net.java.ao.Entity; 
import net.java.ao.OneToMany; 

public interface Communicator extends Entity { 
    @OneToMany 
    public Message[] getSendMessages(); 

    @OneToMany 
    public Message[] getAcceptMessages(); 

} 

테스트 케이스.

1. localhost의 mysql에 연결하십시오.

2. 테이블 스키마를 만듭니다.

3. 발신자와 수신자의 두 명의 커뮤니케이터를 생성하십시오.

4. setSender (보낸 사람) 및 setAcceptor (받는 사람)로 10 개의 메시지를 만듭니다.

5. 보낸 사람이 수락 한 메시지 수를 확인하십시오. 0이어야합니다.

6.하지만 junit은 10이지만 0은 아니라고 말합니다.

import java.sql.SQLException; 

import junit.framework.TestCase; 
import net.java.ao.EntityManager; 

public class AOTest2 extends TestCase{ 
    public void test() { 
     String db_host = "localhost"; 
     String db_database = "test"; 
     String db_login = "root"; 
     String db_password = ""; 

     EntityManager m = new EntityManager("jdbc:mysql://" + db_host + "/" + db_database, db_login, db_password); 

     try { 
      m.migrate(Communicator.class, Message.class); 
     } catch (SQLException e1) { 
      e1.printStackTrace(); 
     } 

     try { 
      Communicator sender = m.create(Communicator.class); 
      Communicator acceptor = m.create(Communicator.class); 
      sender.save(); 
      acceptor.save(); 
      for (int i = 0; i < 10; i++) { 
       Message mes = m.create(Message.class); 
       mes.setAcceptor(acceptor); 
       mes.setSender(sender); 
       mes.save(); 
      } 

      assertEquals(true, sender.getAcceptMessages().length == 0); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

고맙습니다.

+0

[이 질문은] 중복 (0120) (이 페이지는 자동으로 영어에서 번역되었습니다.) – nobeh

+0

@JoinTable 주석. http://activeobjects.java.net/0.8.2/api/net/java/ao/package-summary.html – KenichiYamamoto

+0

@nobeh JPA와 ActiveObjects는 비슷하지만 두 개의 서로 다른 ORM입니다. –

답변

1

조금 늦었지만 지정해야 두 관계를 구별하기 위해 "반대"OneToMany

@OneToMany(reverse = "methodDefiningTheRelationAtOtherClass") 

참고 속성이 될 수 있습니다에만 0.22.1

때문에 지원 또한 참조 : https://developer.atlassian.com/display/DOCS/OneToMany+Relationship

이 ... "원격 인터페이스에 대응하는 게터의 이름으로 설정합니다 당신이 이러한 속성, 활성 객체를 설정하지 않은 경우. 유형별로 메소드를 추론 할 수 있습니다. "

따라서 AO가 유형에 따라 정보를 유추하면 해결할 수있는 첫 번째 관계를 취하게되며 이는 항상 동일한 테이블에 대한 모든 OneToMany 주석에 대해 동일합니다.

관련 문제