在 spring jpa 中针对复合主键使用 @query 查询
spring jpa 的 @query 注解允许我们编写自定义查询。对于具有复合主键的实体,需要考虑如何引用字段。
例如下面这段代码:
@query("select count(id) from userrecommendedentity where id.userid = :userid and islike = :islike") int countbyuseridandislike(long userid, int islike);
这里,将收到无法解析字段 "id.userid" 的错误。
这是 потому что spring jpa 不会自动解析复合主键的属性。要解决这个问题,需要手动为 unionid 类编写一个转换器:
@converter(autoapply = true) public class unionidconverter implements attributeconverter<unionid, string> { @override public string converttodatabasecolumn(unionid id) { return id.getuserid() + "," + id.getrecommendeduserid(); } @override public unionid converttoentityattribute(string value) { string[] split = value.split(","); return new unionid() .setuserid(long.valueof(split[0])) .setrecommendeduserid(long.valueof(split[1])); } }
定义转换器后,可以在 @query 中使用 "id" 代替 "id.userid":
@Query("select count(id) from UserRecommendedEntity where id = :id and isLike = :isLike") int countByUserIdAndIsLike(@Convert(converter = UnionIdConverter.class) Id id, int isLike);
请注意,ide 可能会提示无法解析字段 "id",但实际代码可以运行。
以上就是Spring JPA中如何使用@Query注解查询具有复合主键的实体?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号