【发布时间】:2012-01-03 16:12:46
【问题描述】:
使用 Hibernate 3.6.8.Final 和 Spring 3.0.5.RELEASE ,我正在尝试为具有多个实现的类添加一些 Common DAO 功能,这些实现被重写以实现特定的类,但它不适用于 DetachedCriteria .
例子:
在基类中:
public interface ICat {
public void setMeowSound(String meow);
public String getMeowSound();
}
然后每个继承的项目都会定义休眠注释。
例如
@Entity
@Table(name="SQUAWKY_CATS")
public class SquawkyMeowingCat implements ICat, Serializable {
@Id
@Column(name="SQUAWK_NAME")
private String meow;
public String getMeowSound() {
return meow;
}
public void setMeowString(String meow) {
this.meow = meow;
}
}
这意味着我可以使用:
Criteria criteria = Session.createCriteria(ICat.class);
Spring/Hibernate 知道它会从特定项目的具体继承中提取 ICat 的注释。
但是,如果我尝试这样做:
DetachedCriteria subQuery = DetachedCriteria.forClass(ICat.class,"inner"); // etcetera
然后我在运行时为 ICat 获得一个未知实体。
现在这很有意义,因为第一个实例是从 Session 中创建它,因此它具有所需的所有配置,而 DetachedCriteria 是一个静态方法,但是在尝试执行时会出错
criteria.list()
此时它已经接收到 Session 并且应该知道 ICat 实际上是一个 SquawkyMeowingCat,它具有所有注释。
所以我的问题分为两部分:
1) 这是已知的行为,并且会永远这样吗?
2) 谁能想到一个简单的方法来解决它,而不使用接口和具体的 ClassHolder 来交还它需要创建的类的实例?
【问题讨论】:
标签: java hibernate detachedcriteria