안드로이드에 대한 최근 프로젝트에서 일대 다 관계와 간단한 일대일 관계를 모델링하기 위해 OrmLite를 사용했습니다. Ive는 일대 다 관계에서 자식이 데이터베이스의 부모에 대한 외래 키 참조를 보유하고 있음을 확인했습니다. 부모 개체를 로딩 할 때 여전히 OrmLite는 무엇을해야하는지 알고 있으며 물론 원하는 동작 인 자식 요소의 컬렉션을로드합니다.안드로이드 OrmLite 외래 키/해외 컬렉션
그러나 단순한 일대일 관계에서는 동일한 동작을 수행하기 위해 부모 개체가 외래 키 열을 보유해야합니다.
실제 질문 : 일대 다 관계의 표준 동작이므로 외래 키만 자식에 설정되어있는 경우 OrmLite가 하위 개체를 일대일 관계로로드 할 수 있습니까? ? 단순히 설정 자식 2를 저장할 때 그래서
public class Child1/Child2
{
@DatabaseField(foreign = true)
private Parent parent;
}
:이 같은 부모에 대한 참조가 필요
@DatabaseTable
public class Parent
{
@DatabaseField(foreign = true)
private Child1 child1;
@ForeignCollectionField
private Collection<Child2> children2;
}
아이 1 그래서
2 : 여기
몇 가지 예제 코드입니다child2.setParent(parent);
child2Dao.create(child2)
하지만 child1과 child2를 포함하여 부모를 쿼리 할 때 동일한 동작을하기 위해서는 LD 주변의 관계를 다른 방법으로 저장해야합니다 : 내가 원하는대로이 매우 불편
parent.setChild1(child1)
parentDao.create(parent)
중 자식 1/자식 2 모두 부모의 외래 키 또는 다른 방법으로 주위를 들고. 그러나 혼합물은 다소 추한 것처럼 보인다!
아이디어를 얻는 방법은 무엇입니까?
Ive가이 질문에 대한 답변을 검색했지만 찾을 수 없습니다. 중복 된 경우, 죄송합니다!
대단히 감사합니다!
편집 :
더 정확하게 할 수 : 은 가능한 내 자식 1 테이블의 외래 키를 설정하고 여전히 부모에 대한 쿼리 할 때 자식 1을 얻을 수있을 것입니다. ORMLite는 child2의 외국 컬렉션을 자동으로 처리합니다. 나는 아이에게도 똑같은 행동을 원한다 .1. 하지만 부모 테이블이 자식 1에 대한 참조 (외래 키)를 가지고 있지 않기 때문에
Parent parent = parentDao.queryForId(1)
유일한 자식 2를 얻을 수 쿼리를 만들 다음
child1.setParent(parent);
child1Dao.create(child1);
을 설정 한 경우. child1만이 상위에 대한 참조를 갖습니다.
그래서 : OrmLite가 부모 외래 키 열을 자동으로 업데이트하도록하거나, 부모에 외래 키가 설정되어 있지 않아도 Ormlite에게 여전히 child1을 가져 오라고 말하고 싶습니다 (이는 child2 모음과 동일합니다). 어떻게 든 가능합니까? 안 그래요?
나는 이것이 너무 혼란스럽지 않기를 바래요. :) 부모님의 외래 키를 설정하는 것이 더 간단하다는 것을 전적으로 알고 있습니다.그러나 부모님의 외래 키를 가지고있는 어린이들과 그렇지 않은 어린이들로 끝나기 때문에 나는 그 접근법을 정말로 싫어합니다.
당신에게
는 당신에게 당신의 빠른 응답 주셔서 대단히 감사 설정하여 그것을 달성 할 수있다! Im은 MS 엔터티 프레임 워크 backround에서 오는 임으로 ORM의 기본 기능을 완전히 알고 있습니다. 나는 나의 질문에 대해 아주 분명하지 않았던 것으로 보인다. 나는 갱신하려고 노력할 것이다. –
그래서 편집을보십시오. 사실 아마도 외래 키를 저장하지 않는 @ForeignField (OrmLite에 존재하지 않는다고 가정)와 같은 것이 필요할 것입니다. 그러나 ORMLite는 Account (부모)를 질의 할 때 ORDite (자식)를 포함하도록 알려줍니다. –