@Entity
public class Register {
@Id
@Column(nullable = false, unique = true, updatable = false)
private Long userId;
private Date checked;
@Column(nullable = false)
private RegisterType tipo;
@ElementCollection(fetch = FetchType.LAZY, targetClass = String.class)
@Column(name = "relatedMedia")
@Cascade(value = { org.hibernate.annotations.CascadeType.ALL })
@Fetch(FetchMode.SUBSELECT)
@BatchSize(size = 200)
private List<String> relatedMedia = new Vector<String>(5);
private boolean preLiked = false;
private boolean preCommented = false;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = false, mappedBy = "toUser")
@OrderBy("quando DESC")
@Fetch(FetchMode.SELECT)
private List<Message> messages = new Vector<Message>(50);
}
我的系统中有这个实体的问题。实际上数据库有1.5万个已保存的寄存器,所有这些寄存器都有0个消息和0个相关媒体(确保问题不在于它们)
当我尝试从数据库加载所有Register.userId时,查询工作正常且非常快。
当我尝试从数据库加载所有注册表时,hibernate停止响应。 在mysql控制台中运行查询说在几毫秒内返回查询...但是在hibernate中,程序简单地陷入了框架的一些内部代码中。没有异常,没有回头,没有更长的回应。
考虑到我的实体非常简单,它的主键加上2个布尔值,一个int [tipo]和一个日期......加载主键和所有5个字段之间的区别不应该太长。
有谁知道可能是什么问题?那有什么限制吗?是一个堆限制?但如果是堆限制为什么我不得到stackoverflow?
=================== UPDATE ====================== 尽管事实上没有抛出异常,但我对堆大小有很大的怀疑,所以我只是调整了jvm上的堆值,查询工作时间不到10秒。
问题是为什么从未抛出异常?这是一个运行时异常,所以应该直接从jvm抛出... hibernate在循环中有catch(Exception e)
吗?