2013-09-24 4 views
1

내 안드로이드 앱에서 서버에서 레코드를 가져 와서 db에 저장합니다. 먼저 "메시지"레코드를 저장하지 않고도 저장하고 싶습니다. 첨부 된 "스레드"레코드.(ORMLite - android) 외래 키 필드 직접 설정

메시지가 구성되어

  • 문자열 ID
  • String 본체
  • 긴 sent_ts
  • 문자열
  • 문자열

는 설정이 가능을 topic_id sender_id topic_id 및 sender_id 레코드를 Message 객체에 직접 저장 더미 토픽 인스턴스와 사용자 인스턴스를 만드는 것보다 더 낫지 않습니까? 필자는 필드를 외국으로 표시하거나 관련 객체를 좀 더 쉽게 조회하거나 모든 중첩 된 객체를 저장하지 않을 수도 있지만 외부에서 키가 제공되는 경우 외래 키 참조를 직접 설정할 수도 있습니다. ?

Android 안드로이드에서 표준 안드로이드 SQLite 설정을 사용하고 있습니다.

편집

드디어 동일한 데이터베이스 테이블에서 여러 모델 작성에 정착했다. 가장 세련된 솔루션은 아니지만 컨텍스트에 따라 외부 ID 필드를 직접 채우거나 다른 테이블에 조인 할 수있는 유일한 방법 인 것처럼 보였습니다.

답변

1

첨부되어있는 "스레드"레코드를 먼저 저장하지 않아도 "메시지"레코드를 저장할 수 있기를 바랍니다.

그래서 각 Message 외국 TopicUser 필드가, 당신은 당신이 그 이물질에 할당 한 전에 Message 인스턴스를 유지하고 싶습니다?

예, 확실히 topicuser 필드는 null으로 남겨 둘 수 있습니다. 물론 canBeNull=true으로 표시해야합니다. 그런 다음 나중에 해당 Messagetopic 또는 user 필드를 설정 한 다음 messageDao.update(message)으로 전화하여 데이터베이스를 업데이트 할 수 있습니다.

편집 :

지금은 이해 귀하의 의견을 읽은 후. id 필드가 설정된 더미 객체를 만드는 대신 클래스에 id 필드를 저장하는 방법이 있습니까? 원시 SQL 문을 직접 작성하지 않으면 대답은 없습니다. ORMLite는 기대하는 바에 따라 Topic 필드가 있어야합니다. 이드를 원할 경우 Topic topic 대신 int topic_id 필드를 사용할 수 있으며 직접 주제 관련을 수행 할 수 있습니다.

+0

내가 원하는 것은 Message에 모든 thread 엔티티를 가져온 경우에 관련된 스레드에 해당하는 Thread 객체를 인스턴스화 할 데이터를 실제로 갖기 전에 Message에 thread_id 레코드를 저장하는 것이다. 스레드 엔터티 앞에. –

+0

사용중인 키는 Android 응용 프로그램에서 외인성을 띄고 있습니다. –

+0

나는 내 대답을 @Alan 편집했습니다. – Gray