将Hibernate与泛型一起使用
我在理解Hibernate如何处理泛型时遇到一些麻烦,并且想知道实现我的目标的最佳方法。
给定一个简单的通用实体:
@Entitypublic class Box<T>{
private T t;
@Id
private long id;
public void setT(T t) {
this.t = t;
}
public T getT() {
return t;
}
public void setId(long id) {
this.id = id;
}
public long getId() {
return id;
}
}
在进行hibernate初始化时,出现异常: ...has an unbound type and no explicit target entity. Resolve
this Generic usage issue or set an explicit target attribute (eg
@OneToMany(target=) or use an explicit @Type
我几乎可以肯定,这是因为我没有给hibernate一些<T>
可能的限制条件。我知道你可以指定的东西,如targetEntity=String.class
上面t
的注释,但你失去使用泛型的灵活性。我可以使用注解限制可接受的泛型的范围吗?例如:如果我想要class
ChildA
,ChildB
该类从抽象类继承而来Parent
,在那里可以持久化呢?另外,它也应该能够接受String
。能Hibernate
处理这样的事情吗?
回答:
您正在寻找的可能是Hibernate的隐式多态性。还有一个鲜为人知的“任何”关系可以提供完全的灵活性,但是它有一些折衷。您还可以在多对多中使用“任意” 。
基于您的“
Box”类并使用@Any
映射,我已经在Github上创建了一个可运行的示例。您可以浏览(或专门用于Box类)或将其签出并运行
git clone git://github.com/zzantozz/testbed tmpcd tmp
mvn -q compile exec:java -Dexec.mainClass=rds.hibernate.AnyMapping -pl hibernate-any
以上是 将Hibernate与泛型一起使用 的全部内容, 来源链接: utcz.com/qa/409390.html