如果我使用JPA/Hibernate Annotations在POJO中有以下映射集合:
@OneToMany(mappedBy = "columnName", fetch = FetchType.LAZY)
@OrderBy("aField")
@MapKeyJoinColumn(name = "id_fk")
@LazyCollection(value = LazyCollectionOption.EXTRA)
private Set<PojoClass> collection = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)
是否可以将加载的集合的大小限制为特定的数字n,或者将页面大小设置为延迟加载集合的前n个元素,而不从该类的其他实例加载所有项目或任何其他项目(例如@BatchSize)?
请注意,问题显式引用POJO映射,而不是使用Criteria或任何其他方式以编程方式限制显式查询中的大小.
我一直在寻找的可能解决方案是在Hibernate中找到SQL TOP语句的实现,希望作为注释或创建自定义CollectionPersister来修改生成的查询(尽管这需要在支持的方言中实现TOP语句).
前几天我们把一个数据库从 utf8 迁移到了 utf8mb4。由于每个字符的额外字节数VARCHAR(255),VARCHAR(191)由于迁移,我们的大部分主键都从到更新。
问题是现在我们无法在引用现有表的新表上添加新的 FOREIGN 键。我们在 MySQL Workbench 中收到以下错误:
“引用表没有与 table.id 类型兼容的候选列。提示:源列的类型为 VARCHAR(191),引用表的 PK 为 VARCHAR(191)。”
如果我们尝试通过控制台添加外键,我们会得到:
最新的外键错误
2014-02-13 10:27:51 126bb3000 表 table/#sql-159_2b2 的外键约束错误:外键 (fk_id) 引用表 (id):在被引用的表中找不到索引,其中被引用的列显示为表和引用表中的第一列或列类型与约束不匹配。
但是,这两种类型的定义都如VARCHAR(191)您在报告的错误中所见。
我们缺少什么?