jpa和postgres删除:'错误:列数(1703)超过限制(1664)' &安培;失败

时间:2015-06-03 11:01:51

标签: hibernate postgresql java-ee jpa hibernate-mapping

我们正在使用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与此类似,但没有具体答案?

由于

1 个答案:

答案 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à。