2012-04-27 11 views
1

まず、私の悪い英語をお詫びします。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をトリガーして関係を作成することができます。

答えて

0

Processamentoのクエリを書き込んで、List<Fila>を取得していますが、これは問題ありません。

Query query = session.createQuery("from Processamento"); 
List<Processamento> processamentos = query.list(); 

for(Processamento processamento: processamentos){ 
    System.out.println(processamento.getFila().getIdFila(); 
} 
+0

素晴らしいですが、間違った名前の列に関連する問題を盗みました。おそらく、関係が間違って設定されているのでしょうか?ありがとう –

関連する問題