вернуть значение вместо списка из таблицы, используя hibernate - PullRequest
0 голосов
/ 23 февраля 2012

Я новичок в спящем режиме. Надеюсь, вы, ребята, сможете помочь мне с моей маленькой проблемой.Я хочу, чтобы одно значение возвращалось как значение, а не как список из базы данных.Я использую hibernate для этого, но я не знаю, как это сделать, это то, что я получил до сих пор:

эта тема: Hibernate Возвращает целочисленное значение мне не оченьпоскольку я не использую сеансы, а 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, и его auto_incremented.Но я не получил никаких настроек, потому что я не хочу, чтобы пользователь был вынужден вводить уникальный идентификатор этого пользователя.Но я хочу иметь возможность получить идентификатор из таблицы сотрудников, где bsn равно заданному значению bsn из объекта, чтобы я мог зарегистрировать количество часов, в течение которых определенный сотрудник (идентификатор) работал над определенным проектом (идентификатор).

1 Ответ

2 голосов
/ 23 февраля 2012

В интерфейсе javax.persistence.Query нет метода uniqueResult() (который используется в вашем коде). Чтобы получить один результат, используйте getFirstResult() или getSingleResult(). Но обратите внимание, что ни один из них не особенно полезен в вашем случае по следующим причинам:

  • Вызов getFirstResult () вернет вам первый элемент в Коллекция возвращается по вашему запросу. Который может или не может быть элемент, который вы искали.
  • Invoking getUniqueResult() ожидает возврата запроса в точности один элемент и вызовет исключение, если возвращенная коллекция пуста или содержит более одной записи.

Если ваше значение bsn действительно уникально, используйте getUniqueResult(), но если это не так, вам нужно пересмотреть ваш дизайн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...