对于类Example,我有一个接口IExample,它是一个Hibernate实体,因为我希望我的应用程序允许其他开发人员更改模型层的实现。我的界面如下:
public interface IExample {
public int getId ();
public void setId (int id);
public IOtherClass getOtherClass ();
public void setOtherClass (IOtherClass otherClass);
}
IOtherClass是另一个Hibernate实体OtherClass的接口。
我的课是:
@Entity
@Table(name="example")
public class Example implements IExample {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@OneToOne(targetEntity=OtherClass.class)
@JoinColumn(name="otherclass")
private IOtherClass otherClass;
}
如您所见,我正在使用接口IOtherClass并将其映射到具有Hibernate实体的
targetEntity=OtherClass.class
这工作正常,但是当我尝试使用DAO时出现问题。当我在示例中使用IOtherClass时,我希望能够在调用时告诉休眠状态:
Example example = new Example();
IOtherClass otherClass = example.getOtherClass(); // Returns IOtherClass
getCurrentSession().save(otherClass);
我不是要保存接口,而是我的OtherClass实体。实际上,如果我尝试执行此操作,则会得到异常:
Unable to locate persister: IOtherClass
一种选择是将我的DAO获得的每个IOtherClass实体显式转换为OtherClass,但这是不安全的,并且看起来不是编码此内容的最佳方法。
我的问题是:是否有一种方法(通过注释或类似方法)告诉我的DAO,当它们收到IOtherClass实例时要寻找哪个类?