【发布时间】:2019-06-12 09:30:33
【问题描述】:
我有三个实体类:PlayerData、IpData 和 TwinData。
TwinData 和 IpData 都使用外键引用 PlayerData。
代码如下:
@DatabaseTable
public class PlayerData {
@DatabaseField(generatedId = true)
private int id;
@DatabaseField
private UUID uuid;
@ForeignCollectionField
private ForeignCollection<IpData> ips;
@ForeignCollectionField
private ForeignCollection<TwinData> twins;
// Getters and setters...
}
@DatabaseTable
public class IpData {
@DatabaseField(generatedId = true)
private int id;
@DatabaseField(foreign = true)
private PlayerData playerData;
@DatabaseField
private Date firstUsage;
@DatabaseField
private String address;
// Getters and setters...
}
@DatabaseTable
public class TwinData {
@DatabaseField(generatedId = true)
private int id;
@DatabaseField(foreign = true)
private PlayerData mainPlayer;
@DatabaseField
private boolean adminNoticed;
@DatabaseField
private UUID uuid;
// Getters and setters...
}
当我尝试使用流迭代 PlayerData.ips 时,我得到 SQLException [SQLITE_ERROR] SQL error or missing database (no such column: playerData_id)。使用TableUtils.createIfNotExists() 自动生成表格。
这是引发该异常的代码:
// playerData is retrieved from Dao<PlayerData, Integer>
playerData.getIps().stream().noneMatch(ip -> ip.getAddress().equals(playerIp))
我只是不明白为什么它会尝试选择 playerData_id 列。
我应该使用playerData_id 列手动为TwinData 和IpData 创建数据库表吗?还没有尝试过,但我认为它不会有帮助。
【问题讨论】: