本文介绍了房间与条件的关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何为关系添加条件?
例如,我们有对象Pet
For example, we have object Pet
@Entity
public class Pet {
@ PrimaryKey
int id;
int userId;
String name;
String type;
// other fields
}
和对象用户
public class User {
int id;
// other fields
}
为了吸引宠物,我们制作了对象
For getting user with pets we make object
public class UserAllPets {
@Embedded
public User user;
@Relation(parentColumn = "id", entityColumn = "userId", entity = Pet.class)
public List<PetNameAndId> pets;
}
如何按类型吸引宠物用户?只有狗或只有猫
How is possible to get user with pets by type? Only dogs or only cats
这是道课:
@Dao
public abstract class UserDao {
@Query("SELECT * FROM `users`")
public abstract UserAllPets getUserWithPets();
}
推荐答案
只需使用Embedded
从所有者模型中创建一个包装器,然后在DAO对象中查询JOIN
.
Just create a wrapper from your owner model, using Embedded
and query JOIN
in your DAO object.
例如:User
有许多Pet
.我们将找到所有Pet
,并按User
的ID和Pet
的年龄大于9的年龄进行过滤:
For example: User
have many Pet
s. We will find all Pet
, filter by User
's id and Pet
's age greater equal than 9:
@Entity(tableName = "USERS")
class User {
var _ID: Long? = null
}
@Entity(tableName = "PETS")
class Pet {
var _ID: Long? = null
var _USER_ID: Long? = null
}
// Merged class extend from `User`
class UserPets : User {
@Embedded(prefix = "PETS_")
var pets: List<Pet> = emptyList()
}
在您的UserDao
@Dao
interface UserDao {
@Query("""
SELECT USERS.*,
PETS._ID AS PETS__ID,
PETS._USER_ID AS PETS__USER_ID
FROM USERS
JOIN PETS ON PETS._USER_ID = USERS._ID
WHERE PETS.AGE >= 9 GROUP BY USERS._ID
""")
fun getUserPets(): LiveData<List<UserPets>>
}
突出显示的SQL语法:
SQL Syntax highlighted:
SELECT USERS.*,
PETS._ID AS PETS__ID,
PETS._USER_ID AS PETS__USER_ID
FROM USERS
JOIN PETS ON PETS._USER_ID = USERS._ID
WHERE PETS.AGE >= 9 GROUP BY USERS._ID
这篇关于房间与条件的关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!