2011-12-11 1 views
2

방금 ​​OrmLite를 사용하기 시작 했으므로 나는 그걸 가지고 놀고 있습니다. 나는 몇 가지 개념을 이해하는 데 어려움을 겪고있다. 다 대다 관계를 다룹니다. 보장 사람 여기ormlite를 사용하여 다 대 다 관계에서 전체 데이터 세트를 검색하는 방법은 무엇입니까?

Pc 
    Name 
    Domain 
Ethernet 
    IP 
    Gateway 
    Subnet 
    MAC 

그리고 대다-관계 단지 온라인 예제와 같이 :

이들은 내 주요 테이블입니다 내가 통해 데이터베이스를 채우는

PcEth 

:

PC somePc = new PC("randomPc", "someDomain"); 
    pcDao.create(somePc); 

    Ethernet eth1 = new Ethernet("127.255.0.1", "255.0.0.0", "192.168.1.1", "macadress"); 
    Ethernet eth2 = new Ethernet("192.168.1.1", "255.0.0.0", "192.168.1.1", "macadress"); 
    ethernetDao.create(eth1); 
    ethernetDao.create(eth2); 

    pcEthernetDao.create(new PcEthernet(somePc, eth1)); 

그러나 저는 어떻게하면 Pc에 속한 모든 데이터를 얻을 수 있는지 잘 모르겠습니다. 나는 다른 테이블의 데이터를 자동으로 검색하기 위해

PC pc = pcDao.queryForId(1); 

을 기대하고있었습니다. ORM이해야 할 일이 아닌가? 개체가 있으므로 기본 데이터베이스를 신경 쓸 필요가 없습니다. 그러나 실제로 PC 정의 속성 만있는 Pc.object 만 있습니다. (한편으로는 이 아니며,은 놀랍습니다. 나는 pcDao 만 다루고 있습니다.)

그래도 어떻게 모든 것을 포함하는 "메타 객체"를 얻을 수 있는지 쿼리를 작성해야합니다. PC에 속한 데이터? PC의 데이터를 포함하는 객체 및 Pcs에 속한 ethernetDevices 목록 (자체 Dns 주소 목록 포함) 및 소프트웨어 및 운영 체제 목록

는 지금 수동으로 종속성을 해결하기 위해 건가요? Pc를 쿼리하고, PcEthernet-table에 일치하는 ID를 얻고, EthernetDevice를 검색하는 등의 요청을합니까?

아니면 내가 아주 아직 파악하고 있지 않다 트릭이있다?

답변

3

이 좋다하지만 난 어떤 컨텍스트를 추가 할 거라고 생각했다. 그는이 관계의 적어도 일부를 스스로 관리해야 할 것이 틀림 없습니다.

는 ORM을 어떻게해야되는 것이 아닙니다 즉?

예, ORMLite는 "크기 대 기능 세트"전쟁에 지속적으로 맞서고 있지만. 그것은 "Lite"ORM이되도록 설계되고 만들어졌습니다.이 목적을 위해 결코은 Hibernate 나 iBatis와 같은 ORM 기능을 완벽하게 지원합니다.

ORMLite로 수행 할 수있는 작업과 데이터 집합은 @Emmanuel에서 언급 한대로 PcEthernet 개체에 @ForeignCollectionField이 있어야합니다.당신이 Pc를 검색 할 때

public class Pc { 
    @DatabaseField(generatedId = true) 
    private long id; 
    @ForeignCollectionField 
    private ForeignCollection<PcEthernet> pcEthernets; 
    ... 
} 

, 별도의 쿼리는 pcEthernets를 입력합니다. 그런 다음 연결된 Ethernet 개체를 가져 오려면 쿼리를 수행해야합니다.

자동으로 조인 테이블을 생성하고 IN 쿼리를 자동으로 수행하라는 요청이있었습니다. 그것이 어떻게 작동하는지 또는 발전을 도울 것인지 알고 싶다면 ORMLite developers mailing list에 가입하십시오.

마지막으로,이 경우 실제로는 다 대 다 관계가 필요합니까? Ethernet 개체에 Pc 개체가 하나만 있습니까?

3

당신은 ormlite 저장소의 many-to-many example 볼 수 있습니다.

이 예에서는 테이블 User, PostUserPost이 있습니다. 그래서 객체를 사용하여 조인 테이블 UserPost을 나타내고이를 사용하여 관계를 쿼리합니다. 마술은 없다.

어쩌면 당신은 당신의 M2M 관계의 양쪽 측면에있는 @ForeignCollectionField 주석을 사용하여 이물질의 자동 채우기를 얻을 수 있습니다. 엠마누엘의 대답 @

+0

그래서 내 자신을 getAllMfrom (N) 및 getAllNfrom (M) 메서드를 n - to - m 관계를 처리해야 할 것 같습니다. 그것이 조금 더 일반적인 수있을 지 궁금해. – k0pernikus

관련 문제