2012-02-07 1 views
0

У меня проблема с критериями Subqueries.exists.Hibernate Subqueries.exists

У меня есть следующие:

DetachedCriteria criteria = DetachedCriteria.forClass(Expense.class, "mainExpense") 
     .add(Restrictions.eq("group", group)) 
     .addOrder(Order.desc("created")); 

if (all) { 
    criteria.add(
      Restrictions.or(
        Restrictions.eq("status", ExpenseStatus.PENDING), 
        Restrictions.eq("status", ExpenseStatus.COMPLETE) 
      )); 
} else { 
    criteria.add(Restrictions.eq("status", ExpenseStatus.PENDING)); 
} 

if (user != null) { 
    DetachedCriteria userSubCriteria = DetachedCriteria.forClass(UserExpense.class, "userExpense") 
      .add(Restrictions.eq("userExpense.primaryKey.user", user)) 
      .add(Restrictions.eq("userExpense.primaryKey.expense", "mainExpense")) 
      .setProjection(Projections.property("userExpense.primaryKey")); 
    criteria.add(Subqueries.exists(userSubCriteria)); 
} 

return getHibernateTemplate().findByCriteria(criteria); 

Если я передать нулевой пользователь (не используя Subqueries.exists) он работает нормально и возвращает мне действительные статьи расходов. Если я даю пользователю, если мне дано следующее:

org.springframework.orm.hibernate3.HibernateSystemException: не удалось получить значение поля путем отражения getEx Expense.id; вложенное исключение org.hibernate.PropertyAccessException: не удалось получить значение поля с помощью отражения добытчик Expense.id

и нижней в журналах:

Невозможно установить java.lang.Integer поле Expense.id для Java .lang.String

Кто-нибудь имеет представление о том, что я делаю неправильно?

ответ

7

Я думаю, что есть две проблемы в запросе:

  1. существует подзапрос должен иметь проекцию возвращающегося один столбец. Вы используете проекцию, которая возвращает встроенный объект.
  2. Вы сравниваете «userExpense.primaryKey.expense» и «mainExpense» с Restrictions.eq(). Я не думаю, что это действительно так. Вы должны использовать Restrictions.eqProperty("userExpense.primaryKey.expense.id", "mainExpense.id")
+0

Если кажется, что из этого Restrictions.eq ("userExpense.primaryKey.expense", "mainExpense.id"), но он не работает, поскольку вы предложили либо: -? – Razvi

+0

как это не работает? Какое исключение? У вас есть поле ID в Expense? –

+0

java.lang.ClassCastException: java.lang.String не может быть отнесено к java.lang.Integer – Razvi

 Смежные вопросы

  • Нет связанных вопросов^_^