java - 使用 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 的实例时要查找什么类?
解决方案
推荐阅读
- apache-kafka - Kafka,commitSync 成功
- angular - 为什么 TranslateService Angular 不会将当前语言添加到 localStorage?
- django - Django - 使用子查询更新
- javascript - 数组 indexOf() 和字符串 indexOf() 之间的差异导致版本问题
- tsql - 在 SQL Anywhere 上找不到相关名称
- spring - 如何在 Spring Rest 中实现和限制每秒 API 调用
- matlab - 如何在 UIFigure 中显示频谱图?
- r - 在短语前取出数字
- c# - 为什么我不能在这个控制器类中使用 BaseController Initialize() 方法?
- angular - 与 ReactiveForms 内联添加的 Angular 异步验证器在 new 时触发