使用hibernate从表中返回值而不是list

时间:2012-02-23 12:05:50

标签: java hibernate

我是hibernate的新手我希望你们能解决我的小问题。 我希望将一个值作为值返回,而不是作为数据库中的List返回。我正在使用hibernate,但我不知道该怎么做,这是我到目前为止所做的:

这个主题:Hibernate Return integer value并没有真正帮助我,因为我不使用会话,而query.uniqueResult()对我来说不起作用,因为它不会识别方法uniqueResult(),你我可以在下面的考试中看到我正在使用的库/类/方法。

import java.sql.*;
import org.hibernate.*;

import org.hibernate.criterion.*;
import javax.persistence.Query;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

public class Persistence
{

public void RegisterWorkHours(TimeRegistration object)
    {
        EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("timereg");
        EntityManager em = emf.createEntityManager();
        String q = "SELECT id FROM tbl_employee WHERE bsn = @bsn";
        Query query = em.createQuery(q);
        query.setParameter("@bsn", object.getEmployee().getBsn());

    //And here I want to have a single value being returned as a value and not as a List.

        em.getTransaction().begin();
        em.persist(object);
        em.getTransaction().commit();
        em.close();

    }
}

问题定义: 问题是我在Employee类中定义了id并且auto_incremented。但我没有设置它,因为我不希望用户被迫输入该用户的唯一ID。但我确实希望能够从employee表中获取id,其中bsn等于来自对象的给定bsn值,以便我可以注册某个员工(id)在某个项目(id)上工作的小时数。

1 个答案:

答案 0 :(得分:2)

uniqueResult()接口上没有javax.persistence.Query方法(这是您的代码正在使用的方法)。要获得单个结果,请使用getFirstResult()getSingleResult()。但请注意,由于这些原因,两者都不是特别有用:

  • 调用getFirstResult()将返回第一个元素 您的查询返回的集合。哪个可能是也可能不是 你正在寻找的元素。
  • 调用getUniqueResult()期望返回查询 完全 一个项目,如果返回的集合为空,或者有多个条目,则会抛出异常。

如果您的bsn值非常独特,请使用getUniqueResult(),但如果不是,那么您需要重新审视您的设计。