Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用联接在CriteriaUpdate中编写更新查询?_Java_Hibernate_Jpql - Fatal编程技术网

Java 如何使用联接在CriteriaUpdate中编写更新查询?

Java 如何使用联接在CriteriaUpdate中编写更新查询?,java,hibernate,jpql,Java,Hibernate,Jpql,我正在尝试使用连接编写有关CriteriaUpdate的代码。 但是,在CriteriaUpdate中,连接不起作用。 然后我尝试使用如下子查询 CriteriaBuilder userBuilder = deviceSession.getCriteriaBuilder(); CriteriaUpdate<Switch> deviceUpdate = userBuilder.createCriteriaUpdate(Switch.class);

我正在尝试使用连接编写有关CriteriaUpdate的代码。 但是,在CriteriaUpdate中,连接不起作用。 然后我尝试使用如下子查询

CriteriaBuilder userBuilder = deviceSession.getCriteriaBuilder();
                    CriteriaUpdate<Switch> deviceUpdate = userBuilder.createCriteriaUpdate(Switch.class);
                    Root<Switch> deviceUpdateRoot = deviceUpdate.from(Switch.class);
                    
                    Subquery<Switch> deviceSubquery = deviceUpdate.subquery(Switch.class);
                    Root<Switch> roomRoot = deviceSubquery.from(Switch.class);
                    Join<Switch, Rooms> join = roomRoot.join("room" ,JoinType.LEFT);
                    
                    deviceUpdate.set(deviceUpdateRoot.get("displayName"),"SSS");
                    deviceUpdate.set(deviceUpdateRoot.get("device"),"device");
                    deviceUpdate.set(deviceUpdateRoot.get("operation"),"operation");
                    ***deviceUpdate.set(join.get("roomId"),device.getRoomId());***
                    deviceUpdate.where(userBuilder.equal(deviceUpdateRoot.get("deviceName"),device.getDeviceName()));
                    int returnValue = deviceSession.createQuery(deviceUpdate).executeUpdate();
CriteriaBuilder userBuilder=deviceSession.getCriteriaBuilder();
CriteriaUpdate deviceUpdate=userBuilder.createCriteriaUpdate(Switch.class);
Root deviceUpdateRoot=deviceUpdate.from(Switch.class);
子查询deviceSubquery=deviceUpdate.Subquery(Switch.class);
Root roomRoot=deviceSubquery.from(Switch.class);
Join-Join=roomRoot.Join(“房间”,JoinType.LEFT);
deviceUpdate.set(deviceUpdateRoot.get(“displayName”),“SSS”);
deviceUpdate.set(deviceUpdateRoot.get(“设备”),“设备”);
deviceUpdate.set(deviceUpdateRoot.get(“操作”),“操作”);
***deviceUpdate.set(join.get(“roomId”),device.getRoomId()***
其中(userBuilder.equal(deviceUpdateRoot.get(“deviceName”),device.getDeviceName());
int returnValue=deviceSession.createQuery(deviceUpdate.executeUpdate();
但是我得到了类似于org.hibernate.hql.internal.ast.InvalidPathException的错误:无效路径:“generatedAlias1.roomId”
你能从这个isuue得到帮助吗。

嗨!据我所知,不能在一条语句中更新多个表。我说的不是JPA,而是SQL本身。我建议您将这个更新查询构建为SQL,并尝试在数据库中运行它,以检查它是否工作。