重度查询后,hibernate停止响应

时间:2017-03-22 12:58:01

标签: java mysql hibernate jpa

@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)吗?

0 个答案:

没有答案