我有三个实体类。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
列.我是否应该手动创建数据库表,为 TwinData
和 IpData
与 playerData_id
列?还没试过,但我觉得没什么用。
当我试图遍历
PlayerData.ips
与流,我得到SQLException
[SQLITE_ERROR] SQL错误或数据库缺失(无此列。playerData_id
). 自动生成表的方法是TableUtils.createIfNotExists()
.
你会得到这个错误,如果 playerData_id
不是表中的一个字段。 我很惊讶 TableUtils.createIfNotExists()
没有建立一个领域 playerData_id
在 IpData
表。 我怀疑这些表已经存在,而且你没有使用ORMLite生成的模式。
默认情况下,当ORMLite看到一个 foreign = true
字段,它将在相关实体中存储该类型的id。 参见 国外领域文件. 如果你的模式是以不同的方式定义实体之间的关系,例如用另一个表来定义关系,那么你将需要自己设置该实体,并使用该实体的DAO来查询。
你也许应该看看 外来对象例子 以获取更多信息。
希望对大家有所帮助。