2017-10-25 3 views
2

내가 2 엔티티 클래스가 있습니다룸 지속성 도서관 거래

@Entity(tableName = "work_orders") 
public class WorkOrderEntity 
{ 
    @PrimaryKey(autoGenerate = true) 
    private long id; 
    ... 
} 

@Entity(tableName = "activity_logs", foreignKeys = { 
     @ForeignKey(entity = WorkOrderEntity.class, parentColumns = "id", childColumns = "work_order_id") }) 
public class ActivityLogEntity 
{ 
    @PrimaryKey(autoGenerate = true) 
    private long id; 

    @ColumnInfo(name = "work_order_id") 
    private long workOrderId; 
    ... 
} 

가 하나의 트랜잭션에 work_orders 및 activity_log 테이블에 레코드를 삽입하는 방법이 있나요를? 다음과 같은 것 :

@Transaction 
public void insertBoth(WorkOrderEntity workOrderEntity, ActivityLogEntity activityLogEntity) 
{ 
    insertWorkOrder(workOrderEntity); 
    insertActivityLog(activityLogEntity); 
} 

외래 키 제약을 염두에두고. 여기

는 비슷한 질문 Insert into multiple tables using Room Persistence Library하지만, 정교 대답없이

+0

'insertBoth()','insertWorkOrder()','insertActivityLog()'는'@ Dao' 클래스에있는 모든 메소드라고 가정합니다. – CommonsWare

+0

네, 같은'@ Dao' 클래스에'insertBoth()','insertWorkOrder()'와'insertActivityLog()'를 넣었 습니다만, 문제는 자동 생성 된 id를 가진 WorkOrderEntity를 삽입 한 후에 그 id가 ActivityLogEntity' workOrderId' –

답변

2

나는이 솔루션을 마련 : Transaction` 주석이 존재 @은`하므로`insertBoth()가`꽤 괜찮을 것

@Transaction 
public void insertBoth(WorkOrderEntity workOrderEntity, ActivityLogEntity activityLogEntity) 
{ 
    long workOrderId = insertWorkOrder(workOrderEntity); 
    activityLogEntity.setWorkOrderId(workOrderId); 
    insertActivityLog(activityLogEntity); 
}