首页 > 解决方案 > 使用 Hibernate DAO 保存界面

问题描述

我有一个接口 IExample,用于我的类 Example,它是一个 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 的实例时要查找什么类?

标签: javahibernateinterfacedao

解决方案


推荐阅读