2017-07-18 38 views
6

Android Oda Devamlılığı Kitaplığı ile çok fazla ilişki nasıl uygulanır?Android Oda Persistence Kütüphanesi ile çok fazla ilişki nasıl uygulanır?

Bir kullanıcı bir veya daha fazla aygıta sahip olabilir & Bir aygıt bir veya daha fazla kullanıcıya ait olabilir.

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

Kodunuz, ilişkiyi temsil eden "UserDevice" ile bir M: N ilişkisi uygular gibi görünüyor. – CommonsWare

cevap

1

UserDevice bir yazım hatası varsayarsak böylece id en Long yerine String şunlardır:

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

Sen deneyebilirsiniz:

@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

Sen bir yazım hatası var @ Sorgu

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