如何解决如何在外部化的 jpa 原生查询中指定命名参数
我需要将动态参数 :id 传递给我在 XML 中外部化的本机查询,
但是,我已经通过使用 @param
在我的存储库方法中获取了参数,但这不起作用。我是否需要做更多的工作才能传递此参数。
<?xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<named-native-query name="RoleModulePermissionMapping.getAllNavigationMeunPermissionsByUserId">
<query>
<![CDATA[select
md.name module_name,mdg.name module_group_name,pr.description,ur.name
from {h-schema}nl_system_user s
inner join {h-schema}nl_user_role_mapping urm on s.id=urm.sys_user_id
inner join {h-schema}nl_user_role ur on ur.id=urm.role_id
inner join {h-schema}nl_role_module_permission_mapping rmpm on rmpm.user_role_id=ur.id
inner join {h-schema}nl_module md on md.id=rmpm.module_id
inner join {h-schema}nl_module_group mdg on mdg.id=md.module_grp_id
inner join {h-schema}nl_permission pr on pr.id=rmpm.permission_id
where s.id=:id and pr.description !='restricted']]>
</query>
</named-native-query>
</entity-mappings>
在JPARRepository
@Repository
public interface RoleModulePermissionMappingRepository extends JpaRepository<RoleModulePermissionMapping,Long>,JpaSpecificationExecutor<RoleModulePermissionMapping> {
public List<IUserRoleDTO> getAllNavigationMeunPermissionsByUserId(@Param("id") long id);
}
public interface IUserRoleDTO {
public String getRole();
public String getModuleGroupName();
public String getModuleName();
public String getRouteUrl();
public String getPermissions();
public String getLevelOfAccess();
public String getMdgdisplayOrder();
public String getMddisplayOrder();
public String getMdgIcon();
public String MdIcon();
public Boolean isNavigableMenu();
}
根据日志,查询工作正常,但在运行时未附加参数值,请告诉我相同的解决方法
解决方法
好的,问题是列无法映射到您的映射器接口 IUserRoleDTO
,在您的本机查询中,您需要遵循驼峰命名约定,同时为每个列指定别名以获得正确的映射.
<![CDATA[select
md.name moduleName,mdg.name moduleGroupName,pr.description,ur.name
........
]]>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。