java - 使用流进行迭代时,ForeignCollection 会抛出 SQLException

标签 java database orm ormlite

我有三个实体类: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 错误或缺少数据库(没有此类列: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 手动创建数据库表?尚未尝试过,但我认为这不会有帮助。

最佳答案

When I try to iterate over PlayerData.ips with streams, I get SQLException[SQLITE_ERROR] SQL error or missing database (no such column: playerData_id). Tables are auto-generated with TableUtils.createIfNotExists().

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

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

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

希望这有帮助。

关于java - 使用流进行迭代时,ForeignCollection 会抛出 SQLException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56558906/

相关文章:

java - 在一个表达式中将 ArrayList<String> 转换为 String[]?

database - 海量的流量数据应该如何存储以便于检索?

php - 检索 mySQL PHP 列的计数

java - 静态快捷方式android不出现

java - 从 Java Set 中获取 *any* 值的好方法?

java - 如何存储和重放 JDBC 语句?

python - 为 Django Web 应用程序选择正确的数据库系统

database - 有没有适用于 Haskell 的 ORM 工具?

.net - Eager Load 上的 Entity Framework 6 加载列表

java - Hibernate:如何使用@Embeddables 的自定义集合?