1

首先,对不起我的英语不好。

我是 Java 程序员,但我没有足够的背景来使用 Hibernate。由于在办公室我们正在尝试学习一些新的技术,因此我正在尝试使用 Hibernate 来帮助我们解决数据库问题。

我有两个课程,一个叫 Processamento,另一个叫 Fila

表 processamento 在 Fila 有一个注册表,由 fila.id 定义

加工类

@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 并获取它的 Fila。Processamento 在 Fila 只有一项成果。

谢谢。

此致。

[解决了]

主要错误是我不应该使用 JoinTable,我认为 JoinTable 就像一个联合子句。删除 JoinTable 并添加子句 JoinColumn 解决了我的问题,并且选择可以触发另一个选择并使关系存在。

4

1 回答 1

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();
}
于 2012-04-27T16:03:55.593 回答