簡體   English   中英

Java / Hibernate使用實體上的接口

[英]Java/Hibernate using interfaces over the entities

我正在使用帶注釋的Hibernate,我想知道以下是否可行。

我必須設置一系列表示可以持久保存的對象的接口,以及一個主數據庫類的接口,該接口包含用於持久存儲這些對象的幾個操作(...數據庫的API)。

在此之下,我必須實現這些接口,並使用Hibernate持久化它們。

所以我會,例如:

public interface Data {
  public String getSomeString();
  public void setSomeString(String someString);
}

@Entity
public class HbnData implements Data, Serializable {
  @Column(name = "some_string")
  private String someString;

  public String getSomeString() {
    return this.someString;
  }
  public void setSomeString(String someString) {
    this.someString = someString;
  }
}

現在,這種方法很好,有點像。 當我想要嵌套實體時,麻煩來了。 我想要的界面很簡單:

public interface HasData {
  public Data getSomeData();
  public void setSomeData(Data someData);
}

但是當我實現該類時,我可以按照下面的界面進行操作,並從Hibernate獲取錯誤,說它不知道類“Data”。

@Entity
public class HbnHasData implements HasData, Serializable {
  @OneToOne(cascade = CascadeType.ALL)
  private Data someData;

  public Data getSomeData() {
    return this.someData;
  }

  public void setSomeData(Data someData) {
    this.someData = someData;
  }
}

簡單的改變是將類型從“數據”更改為“HbnData”,但這顯然會破壞接口實現,從而使抽象變得不可能。

任何人都可以向我解釋如何以一種可以與Hibernate一起使用的方式實現它?

也許OneToOne.targetEntity?:

@OneToOne(targetEntity = HbnData.class, cascade = CascadeType.ALL)
private Data someData;

我通常使用的接口是數據訪問對象或DAO。 使用Java泛型,我只能寫一次; Hibernate也可以只編寫一次實現:

package persistence;

import java.io.Serializable;
import java.util.List;

public interface GenericDao<T, K extends Serializable>
{
    T find(K id);
    List<T> find();
    List<T> find(T example);
    List<T> find(String queryName, String [] paramNames, Object [] bindValues);

    K save(T instance);
    void update(T instance);
    void delete(T instance);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM