gay*_*mer 5 java hibernate criteria one-to-many
我有两张桌子,DVD和联系人.
DVD可以租给联系人,联系人可以租用许多DVD.
多对一链接(dvd-->contact)工作正常.
但另一种方式失败了: (contact-->dvd)
这是联系人映射:
<set name="dvds" inverse="true">
<key column="contactId"/>
<one-to-many class="Dvd"/>
</set>
Run Code Online (Sandbox Code Playgroud)
这是联系人的setter getter:
private Set<Dvd> dvds = new HashSet<Dvd>();
public Set<Dvd> getDvds(){
return dvds;
}
public void setDvds(Set<Dvd> dvds){
this.dvds=dvds;
}
Run Code Online (Sandbox Code Playgroud)
当我试图从这个联系人那里租来DVD时:
HashSet<Dvd> tt = (HashSet<Dvd>)dds;
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:
java.lang.ClassCastException: org.hibernate.collection.PersistentSet
cannot be cast to java.util.HashSet
Run Code Online (Sandbox Code Playgroud)
异常是什么意思,我该如何解决?
编辑:这解决了我的问题:
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
Run Code Online (Sandbox Code Playgroud)
Boz*_*zho 15
你不需要施展HashSet.它是一个Set,它不提供任何其他方法.所以就是不要施展.
这是处理集合时的一般规则 - 不要用它们的具体类来引用它们(除非你真的需要).使用List和Set,而不是ArrayList和HashSet
不要试图Set dds投入HashSet.Hibernate使用自己的Set接口实现,该接口PersistentSet不会派生HashSet,因此转换抛出a ClassCastException.可以通过Set接口使用它,也可以HashSet使用它的构造函数创建一个new (在这种情况下,对set的更改不会自动反映在Hibernate中).
Set<Dvd> tt = dds;
Run Code Online (Sandbox Code Playgroud)
要么
HashSet<Dvd> tt = new HashSet<Dvd>(dds);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29914 次 |
| 最近记录: |