由于您发布的代码似乎正确,因此我猜这里。
我建议的第一件事是删除此初始化(这似乎是删除角色的唯一位置),这本身通常是一个好主意(请参阅下面的评论),我认为这可能会干扰hibernate.enable_lazy_load_no_trans=true
已知的泄漏连接。过去:
private Set<Role> roles = new HashSet<>();
第二种尝试是检查是否还用mapBedBy注释了ManyToMany关系的反面以及发生了什么变化。
第三次尝试是,如果急于加载该集合解决了该问题(甚至使FactType,Hibernate.initialize()任意使用)解决了该问题(甚至进一步加剧了enable_lazy_load_no_trans位置)。
最后一个是摆脱enable_lazy_load_no_trans并使用OpenSessionInView
编辑:啊,最后一个,您可能*有此错误(受影响的hibernate4.1.8和4.1.9):https ://hibernate.onjira.com/browse/HHH-7971
因此,使用4.1.7射击可能会带来更好的结果(或可能更糟)。