まず、私の下手な英語で申し訳ありません。
私は Java プログラマーですが、Hibernate を扱う十分な経験がありません。オフィスではいくつかの新しい技術を学ぼうとしているので、Hibernate を使用してデータベースの問題を解決しようとしています。
Processamento と呼ばれるクラスと Fila と呼ばれるクラスの 2 つのクラスがあります。
テーブル processamento には、fila.id で定義された 1 つのレジストリが Fila にあります。
プロセスクラス
@Entity
@Table(name="ra_fila_processamento", schema = "processamento")
public class Processamento implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private int idProcessamento;
private int idFila;
private int idServidor;
private Fila fila;
@Column(name="rfp_id")
public int getIdProcessamento() {
return idProcessamento;
}
public void setIdProcessamento(int idProcessamento) {
this.idProcessamento = idProcessamento;
}
@Id
@Column(name="rfp_rf_id")
public int getIdFila() {
return idFila;
}
public void setIdFila(int idFila) {
this.idFila = idFila;
}
@Column(name="rfp_ser_id")
public int getIdServidor() {
return idServidor;
}
public void setIdServidor(int idServidor) {
this.idServidor = idServidor;
}
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name="ra_fila", schema="processamento", joinColumns = {@JoinColumn(name="rf_id", unique = true)})
public Fila getFila() {
return fila;
}
public void setFila(Fila fila) {
this.fila = fila;
}
}
フィラクラス
@Entity
@Table(name="ra_fila", schema="processamento")
public class Fila implements java.io.Serializable {
private static final long serialVersionUID = 1L;
public Fila() {}
private int idFila;
private String arquivoFonte;
private String status;
@Id
@Column(name = "rf_id", unique = true, nullable = false)
@GeneratedValue
public int getIdFila() {
return idFila;
}
public void setIdFila(int idFila) {
this.idFila = idFila;
}
@Column(name="rf_arquivo_fonte")
public String getArquivoFonte() {
return arquivoFonte;
}
public void setArquivoFonte(String arquivoFonte) {
this.arquivoFonte = arquivoFonte;
}
@Column(name="rf_status")
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
問題は、このコードを実行したときです。
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
try {
Query query = session.createQuery("from Processamento");
@SuppressWarnings("unchecked")
List<Fila> fila = query.list();
session.getTransaction().commit();
if (fila.size() == 0) return false;
} catch (HibernateException e) {
e.printStackTrace();
} finally {
session.flush();
session.close();
}
作成される HQL は次のとおりです。
select processame0_.rfp_rf_id as rfp1_3_, processame0_.rfp_id as rfp2_3_, processame0_.rfp_ser_id as rfp3_3_, processame0_1_.fila_rf_id as fila4_2_ from processamento.ra_fila_processamento processame0_ left outer join processamento.ra_fila processame0_1_ on processame0_.rfp_rf_id=processame0_1_.rf_id
この HQL のエラーは次の部分です。
processame0_1_.fila_rf_id as fila4_2_
このfila_はそこにあるべきではありません。どうすればこの関係 OneToOne を正しく行うことができますか? Processamento 列を Fetch して Fila を取得したいだけです。Processamento の Fila での結果は 1 つだけです。
ありがとう。
よろしくお願いします。
[解決済み]
主な誤りは、JoinTable を使用してはならないということでした。JoinTable はユニオン句のようなものだと思います。JoinTable を削除し、JoinColumn 句を追加すると問題が解決し、選択によって別の選択がトリガーされ、関係が存在する可能性があります。