我一直在尝试使用 cayenne 进行连接查询,但我在使用 Expressions 时遇到了困难。在sql中它会是这样的:
SELECT *
FROM usuarios, rol, user_rol
WHERE usuarios.cod_usuario = user_rol.cod_usuario
AND user_rol.cod_rol = rol.cod_rol
这将是基本的。提前致谢
我一直在尝试使用 cayenne 进行连接查询,但我在使用 Expressions 时遇到了困难。在sql中它会是这样的:
SELECT *
FROM usuarios, rol, user_rol
WHERE usuarios.cod_usuario = user_rol.cod_usuario
AND user_rol.cod_rol = rol.cod_rol
这将是基本的。提前致谢
就像你遇到的另一个问题一样,这个问题的答案是使用关系。一旦你映射了 Usuarios / UserRol 和 UserRol / Rol 之间的关系,你可以通过调用它的方法来遍历用户对象的关系:
Usuarios u = ..
for(UserRol ur : u.getUserRols()) {
Rol r = ur.getRol();
// now do something with it
}
或者查找具有与该用户匹配的查询的角色:
SelectQuery query = new SelectQuery(Rol.class);
query.andQualifier(ExpressionFactory.matchExp("userRol.user", u);
List<Rol> roles = context.performQuery(query);
'ExpressionFactory.matchExp' 的路径参数(即“userRol.user”字符串)应进行调整以匹配从 Rol 实体开始的实际关系名称(因为 Rol 是查询的根),然后转到 UserRol,然后再到乌苏里奥斯。