Hibernate映射 @OneToMany的问题

来源:百度知道 编辑:UC知道 时间:2024/07/06 19:25:45
在主键方Team的Entity中:
private Set<Player> players;
请问这里一定要用Set吗?为什么。
我这样:
private Set<Player> players = new LinkedHashSet<Player>();也可以。
但这样:
private LinkedHashSet<Player> players;就不可以了。报注释异常,提示我@OneToMany的语法错误。

请高手指教Hibernate接下来会怎么操作这个集合,为什么要Set类型?根据多态,LinkedHashSet应该可以的啊。

hibernate就是这么规定的,其实不光是set,你想使用list也是同样的,你只能使用List接口,而不能直接使用LinkedList或者ArrayList。具体要知道为什么你可以去看一下hibernate的源码,你应该可以找到它是怎么解析这个注解的,肯定会有类型的限制。这也有它的道理,一般在软件开发的时候都会遵循一个依赖倒置原则和里氏代换原则。其实我的想法是这只不过是hibernate的规范而已,既然你在使用hibernate,那就肯定要遵循这个规范,这就好像在协同开发的时候你为别人写了一个接口,那他在使用这个接口的时候肯定也要遵循你指定的规范的呀,比如说接口方法的参数的限制,异常的处理。如果你实在是用起来不舒服的话就去修改它的源码吧,反正我认为这样没什么必要。
最后补充一句,在配置一对多映射时最好指定一下懒加载。

错误原因有可能是:

1、 Set<Player> set = new HashSet<Player>();

2、配置文件中配置出错