我试图更改的Hibernate标准看起来像
Criteria crit =
session.createCriteria(device.class)
.createCriteria("deviceConfigurationTemplate")
.createCriteria("deviceModel");
我想简单地将其更改为使用JPA Criteriaqueries。我遇到的问题是Javax。使用多个协同实体作为字符串创建查询。我想使用JPA根标准并使用类似的标准进行多选择
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Device> cq = cb.createQuery(Device.class);
Root<DeviceModel> model = cq.from(DeviceModel.class);
Root<"deviceConfigurationTemplate"> model2 =
cq.from("deviceConfigurationTemplate");
cq.multiselect(model);
这里的问题是您不能将字符串作为参数传递给根对象。我不确定如何创建这样的查询。
为什么要尝试将字符串作为类型参数传递?加入协会后,应使用协会的目标类型对所得的Join
或Path
进行参数化。
查询应该等于SELECT d.deviceConfigurationTemplate.deviceModel FROM Device d
吗?如果是这样,等效标准查询将是:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<DeviceModel> criteria = cb.createQuery(DeviceModel.class);
Path<DeviceModel> model = criteria.from(Device.class).get("deviceConfigurationTemplate").get("model");
criteria.select(model);
在打字中使得更加明确:
CriteriaQuery<DeviceModel> criteria = cb.createQuery(DeviceModel.class);
Root<Device> from = criteria.from(Device.class);
Path<ConfigurationTemplate> configTemplate = from.get("template");
Path<DeviceModel> model = configTemplate.get("model");
criteria.select(model);
您也可以改用from.join()
。