まず、私の悪い英語をお詫びします。Hibernate OneToOneはプレフィックスをカラムに追加します
私はJavaプログラマですが、私はHibernateで作業するのに十分なバックグラウンドを持っていません。オフィスでは、いくつかの新しいテクニックを学ぶことを試みているので、私はデータベースの問題で私たちを助けるためにHibernateを使用しようとしています。
私は二つのクラス、Processamentoと呼ばれるものを持っているし、別のテーブルprocessamentoがfila.id
Processamentoクラス
@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;
}
}
によって定義され、フィラ1つのレジストリを持っているフィラ
と呼ばれますフィラクラス
@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はこの1つである:
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をフェッチし、それをフィラにしたい。 ProcessamentoはFilaで1つの結果しか得ていません。
ありがとうございました。
よろしくお願いいたします。
[SOLVED]
主なエラーは、私がJoinTableを使用すべきではないということでした、JoinTableはUNION句のようなものです、私は思います。 JoinTableを削除してJoinColumn節を追加すると、自分の問題が解決され、selectが別のselectをトリガーして関係を作成することができます。
素晴らしいですが、間違った名前の列に関連する問題を盗みました。おそらく、関係が間違って設定されているのでしょうか?ありがとう –