2017-07-18 71 views
6

如何實現與Android室持久性庫的多對多關係?如何實現與Android室持久性庫的多對多關係?

一個用戶可能有一個或多個設備&一個設備可能由一個或多個用戶擁有。

User device

@Entity 
public class User { 
    public @PrimaryKey Long id; 
    public String userName; 
} 

@Dao 
public interface UserDao { 
    @Query("select * from user") List<User> getAllUsers(); 

    @Query("select * from user where id = :id") 
    User getUserById(long id); 
} 

@Entity 
public class Device { 

    public @PrimaryKey Long id; 
    public String name; 

} 


@Dao 
public interface DeviceDao { 

    @Query("select * from device") 
    List<Device> getAllDevices(); 
} 


@Entity 
public class UserDevice { 
    public String userId; 
    public String deviceId; 
} 

@Dao 
public interface UserDeviceDao { 

// List all devices by userId 
// List all users by deviceId 

} 
+0

你的代碼似乎實現了M:N關係,UserDevice代表關係。 – CommonsWare

回答

1

假設在UserDevice錯字所以ID是Long,而不是String

@Entity(primaryKeys = {"userId", "deviceId"}) 
public class UserDevice { 
    public Long userId; 
    public Long deviceId; 
}  

你可以嘗試:

@Dao 
public interface UserDeviceDao { 

    // List all devices by userId 
    @Query("select * from device " 
      " inner join userdevice on device.id = userdevice.deviceId " 
      " where userdevice.userId = :userId") 
    List<Device> getUserDevices(Long userId); 

    // List all users by deviceId 
    @Query("select * from user " 
      " inner join userdevice on user.id = userdevice.userId " 
      " where userdevice.deviceId = :deviceId") 
    List<User> getDeviceUsers(Long deviceId); 
} 
0

你在一個錯字@查詢

@Query("select * from user where user_id = :id") 
User getUserById(long id); 
相關問題