我们正在使用JPA(休眠)和Postgres,
其中一个删除操作是抛出错误' ERROR:列数(1703)超过限制(1664)'
delete方法如下所示,我们将clazz对象作为所有实体的父对象传递。
protected <E extends T> E delete(UUID id, Class<E> clazz) {
log.debug("deleting entity {}", id);
E object = getEntityManager().find(clazz, id); //clazz is parent of all the entities
if (object != null){
getEntityManager().remove(object);
}
return object;
}
请咨询
问题here与此类似,但没有具体答案?
由于
答案 0 :(得分:1)
实际上em.find
可能会导致很多连接问题,即使没有eagers关系。尝试将您想要操作的对象直接传递给getEntityManager()
,而不仅仅是id。像这样:
protected <E extends T> E delete(Object object, Class<E> clazz) {
log.debug("deleting entity {}", object.getId());
if (object != null){
getEntityManager().remove(object);
}
return object;
}
编辑:
有关级联的更多信息:当你的关联中有太多的cascadetype.ALL时,每个表中的每一列你都会在hibernate将加入的映射中拥有,并最终会抛出此错误。
例如,我有一个没有eagers的实体,每个关联的表都是get类型惰性,但有很多级联。
我打电话给getEntityManager().merge(entity)
时,我收到了这个错误。我有一些80和100列的表,可能不是最好的规范化,但仍然可以接受,我做的是删除cascadetype.MERGE不需要的地方和voilà。