eli*_*yro 10 android android-room
我正在使用Room持久性库开发Android应用程序.我有一个User和一个Car实体
@Entity(tableName = "users")
public class User {
@PrimaryKey
@NonNull
private int id;
private String name;
public User(@NonNull int id, String name) {
this.id = id;
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
和
@Entity(tableName = "cars", foreignKeys = @ForeignKey(parentColumns =
"id", childColumns = "userId", entity = User.class))
public class Car {
@PrimaryKey(autoGenerate = true)
private int id;
private int userId;
private String brand;
public Car(int userId, String brand) {
this.userId = userId;
this.brand = brand;
}
}
Run Code Online (Sandbox Code Playgroud)
我还创建了一个UserWithCar类,如下所示:
public class UserWithCar {
@Embedded(prefix = "user_")
public User user;
@Embedded(prefix = "car_")
public Car car;
}
Run Code Online (Sandbox Code Playgroud)
正如你在UserWithCar中看到的,我使用前缀因为如果我没有,我会收到以下错误:
多个字段具有相同的columnName:id.字段名称:user> id,car> id.
我想使用以下查询获取所有UserWithCar:
@Query("SELECT * FROM users JOIN cars ON users.id = cars.userId")
List<UserWithCar> getUserWithCar();
Run Code Online (Sandbox Code Playgroud)
使用此查询我收到以下错误:
该查询返回com.roomdemo.data.models.UserWithCar不使用的一些列[id,name,id,userId,brand].您可以在字段上使用@ColumnInfo注释来指定映射.com.roomdemo.data.models.UserWithCar有一些字段[user_id,user_name,car_id,car_userId,car_brand],查询不返回这些字段.如果不应该从结果中读取它们,则可以使用@Ignore注释标记它们.您可以通过使用@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)注释方法来禁止此警告.查询返回的列:id,name,id,userId,brand.com.foodtec.roomdemo.data.models.UserWithCar中的字段:user_id,user_name,car_id,car_userId,car_brand.
我可以帮忙吗?谢谢!
更新 使用@Wizard帮助,我从@Embeded中删除了前缀,我为用户的id添加了@ColumnInfo"uId",为了没有相同的id字段,添加了"cId for the car的id.通过这种方式它可以工作!
Par*_* P. 10
查询返回的列:id,name,id,userId,brand.com.foodtec.roomdemo.data.models.UserWithCar中的字段:user_id,user_name,car_id,car_userId,car_brand.
错误表示查询返回的列与Pojo类不同.应该是一样的.或者,您可以使用@ColumnInfo注释将Pojo变量映射到列名称.
例如,
@PrimaryKey
@NonNull
@ColumnInfo(name = "user_id")
private int id;
Run Code Online (Sandbox Code Playgroud)
这样,id将映射到user_id.
| 归档时间: |
|
| 查看次数: |
6494 次 |
| 最近记录: |