情形一:类定义中不重写类的equals和hashCode方法,导致级联删除时栈溢出 public class Module extends AbstractModel { private String name; @ManyToOne @JoinColumn(name = "parentId") private Module parent;//父模块 @OneToMany(mappedBy = "parent",fetch = FetchType.LAZY, cascade = CascadeType.REMOVE) private Set<Module> sons;//子模块 /* @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; Module module = (Module) o; return Objects.equals(name, module.name) && Objects.equals(indexUri, module.indexUri); } @Override public int hashCode() { return Objects.hash(super.hashCode(), name, indexUri); }*/ }
栈溢出信息
java.lang.StackOverflowError
at java.security.AccessController.doPrivileged(Native Method)
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:320)
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdater.java:110)
at java.sql.SQLException.<clinit>(SQLException.java:372)
at com.alibaba.druid.pool.DruidDataSource.handleConnectionException(DruidDataSource.java:1545)
at com.alibaba.druid.pool.DruidPooledConnection.handleException(DruidPooledConnection.java:133)
at com.alibaba.druid.pool.DruidPooledStatement.checkException(DruidPooledStatement.java:77)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeQuery(DruidPooledPreparedStatement.java:241)
at org.hibernate.engine.jdb