【问题标题】:ForeignCollection throws SQLException on iterating using streamsForeignCollection 在使用流进行迭代时抛出 SQLException
【发布时间】:2019-06-12 09:30:33
【问题描述】:

我有三个实体类:PlayerDataIpDataTwinDataTwinDataIpData 都使用外键引用 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 列手动为TwinDataIpData 创建数据库表吗?还没有尝试过,但我认为它不会有帮助。

【问题讨论】:

    标签: java database orm ormlite


    【解决方案1】:

    当我尝试使用流迭代 PlayerData.ips 时,我得到 SQLException[SQLITE_ERROR] SQL 错误或缺少数据库(没有这样的列:playerData_id)。使用TableUtils.createIfNotExists() 自动生成表格。

    如果playerData_id 不是表中的字段,您将收到该错误。我很惊讶TableUtils.createIfNotExists() 没有在IpData 表中创建字段playerData_id。我怀疑这些表已经存在并且您没有使用 ORMLite 生成的架构。

    默认情况下,当 ORMLite 看到 foreign = true 字段时,它将将该类型的 id 存储在相关实体中。请参阅foreign fields documentation。如果您的架构以不同的方式定义实体之间的关系,例如使用另一个表来定义关系,那么您将需要自己设置该实体并使用该实体的 DAO 查询它。

    您或许应该查看foreign object example 了解更多信息。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多