Converting Hibernate's PersistentSet into CopyOnWriteArraySet

北战南征 提交于 2019-12-11 16:14:29

问题


I am using CopyOnWriteArraySet in the following class because I simply like its thread-safe iterator.

public class MyClass{
 Set _children = new CopyOnWriteArraySet();

 public void setChildren(Set children){
  _children = children;
 }

 public Set getChildren(){
  return _children;
 }
}

However, I also use Hibernate for persistency which replaces my CopyOnWriteArraySet with its own PersistentSet (which uses HashSet internally).

Unfortunately, HashSet is not thread-safe, so I want my CopyOnWriteArraySet back.

What's best practice here for the conversion?

My personal, naive attempt would be to replace the setter with this:

 public void setChildren(Set children){
  CopyOnWriteArraySet newSet = null;
  if ((children instanceof CopyOnWriteArraySet) == false){
   newSet = new CopyOnWriteArraySet(children);
  }
  else{
   newSet = (CopyOnWriteArraySet)children;
  }
  _children = newSet;
 }

Is that a good way of working around this issue?

来源:https://stackoverflow.com/questions/6280771/converting-hibernates-persistentset-into-copyonwritearrayset

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!