java - hibernate :在更新中选择

标签 java hibernate select hql

我需要做类似的事情:

session.getTransaction().begin();
session.createQuery("update Pack p set p.book = (select b from Book b where ...) where p.id = :id")
        .setLong("id", pack.getId())
        .executeUpdate();
session.getTransaction().commit();

并且有错误:

Exception occurred during event dispatching: 
org.hibernate.TypeMismatchException: left and right hand sides of a binary logic operator were incompatibile [java.util.Set(BookKeeper.db.Pack.book) : BookKeeper.db.Book]

但是为什么呢? p.book有一个Set<Book>类型,与 (select b from Book b where ...) 相同必须返回。

最佳答案

如果你观察

p.book = (select b from Book b where ...)

选择应该返回一个唯一的值。如果没有,那么事情就会出错,因为你在右手边得到了一套,但左手边正在等待一本书。

这与 sql 语法非常相似。

关于java - hibernate :在更新中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7620115/

相关文章:

java - 获取数组长度时出错抛出异常

java - Spring @async 复制 session

java - 无法连接到数据库错误 : java. sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序

java - 不可变对象(immutable对象)和更新

javascript - Jquery选择语句

java - 生命周期配置未涵盖插件执行 : com. mycila.maven-license-plugin

Spring data jpa Query动态传递where子句

java - Hibernate 上与 @SecondaryTable 的多对一关系

java - 为什么这个 ID 选择在 Jsoup 中不起作用?

sql - 为什么关系代数中的投影运算符会消除重复项?