我的猜测是,Hibernate使用自己的Set实现(PersistentSet)来调用您的setter,该实现实现了延迟加载,并且在调用setter时尚未初始化。由于您在此集合上调用了一个方法,因此它已经使集合在加载阶段本身处于加载阶段,这使Hibernate处于不一致状态。
这就是为什么我更喜欢使用字段访问而不是属性访问(即,将所有映射注释放在字段而不是getter上)的原因。您想在通过“常规”代码调用该方法时复制传递的集合,但是当Hibernate本身调用setter时,您不想这样做:它完全破坏了延迟加载。



