Я не думаю, что исключение происходит из-за того, что вы используете временную сущность в качестве параметра вашего запроса (хотя этот запрос также неверен, см. Ниже).
Исключением является тот факт, что Hibernate очищает сеанс перед выполнением запроса, но вы прикрепили временную сущность к присоединенной сущности в сеансе.Таким образом, он пытается сохранить ассоциацию, но поскольку объект временный и еще не имеет идентификатора, это невозможно.
Теперь ваш запрос: where o = ?
не будет магически запрашивать имя и значение.,Это будет запрос по идентификатору.И это именно то, что вы не хотите делать.Таким образом, запрос должен быть:
select o from ObjectToCheck o where o.name = :name and o.value = :value
И вы должны связать оба параметра.Другой способ сделать это - использовать запрос на примере.Смотри http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#querycriteria-examples.