Java Hibernate не может разрешить свойство - PullRequest
8 голосов
/ 14 марта 2012

Я пытаюсь выполнить простую инструкцию выбора счетчика из метода, который работает в другой части моей программы, но здесь он выдает ошибку.

 public Long validateSub(String source, String tbl){
    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();


    Query q = session.createQuery("SELECT count(s) from SlaveSubscribers s where s.SOURCENAME = :sourcename AND s.TBL = :tbl");
    q.setParameter("sourcename", source);
    q.setParameter("tbl", tbl);

    Long result = (Long) q.list().get(0);
    session.getTransaction().commit();

    return result;

}

Сообщение об ошибке:

Exception in thread "Thread-3" org.hibernate.QueryException: could not resolve property: SOURCENAME of: com.datadistributor.main.SlaveSubscribers [SELECT count(s) from com.datadistributor.main.SlaveSubscribers s where s.SOURCENAME = :sourcename AND s.TBL = :tbl]

Понятия не имею, почему это не работает

Ответы [ 2 ]

11 голосов
/ 03 октября 2012

Просто чтобы прояснить приведенный выше ответ, потому что я не хотел бы, чтобы кто-нибудь его пропустил.

Hibernate использует для запроса свойство переменной в классе, а не имя столбца в базе данных.

В результате, если у вас есть класс модели, подобный этому:

private Long studentId;

@Id
@GeneratedValue
@Column(name="studentid")
public Long getStudentId() 
{
    return studentId;
}

Вам нужно будет выполнить запрос по studentId , а не studentid .

5 голосов
/ 14 марта 2012

У вас нет постоянного атрибута (поля) SOURCENAME в объекте SlaveSubscribeers. Скорее всего, SOURCENAME - это имя столбца базы данных. В HQL необходимо использовать имя поля (с учетом регистра).

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