使用Hibernate DAO保存界面

时间:2019-07-07 09:38:47

标签: java hibernate interface dao

对于类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实例时要寻找哪个类?

0 个答案:

没有答案