使用jpa进行两表联查时总会有字段名相同,所以需要用别名进行区分;

例子:

department表同时包含子级id和父级id:

查询语句为:


  1. select d.id,d.name,d.description,d.parent_id,temp.name as parent_name 
  2. from department d,department temp 
  3. where d.parent_id=?1 and if(d.parent_id=-1,d.id=temp.id,d.parent_id=temp.id)

此时希望同时获取部门信息、部门的父级id和父级部门名称,但不希望在department表在新建一列parent_name,所以我们可以使用@Transient注解表示该属性并非是一个要映射到数据库表中的字段;

但使用@Transient注解需要注意:

1、直接将@Transient注解直接加在parentName属性上,数据库不会创建parent_name字段,上述查询也无法获取值;

2、将@Transient注解加在parentName属性的get方法上,数据库会创建parent_name字段,上述查询可以获取值;

3、将@Transient注解加在parentName属性的set方法上,数据库不会创建parent_name字段,上述查询可以获取值;

关键代码如下:


  1. package cn.test.bean;
  2. import java.util.List;
  3. import javax.persistence.Entity;
  4. import javax.persistence.GeneratedValue;
  5. import javax.persistence.GenerationType;
  6. import javax.persistence.Id;
  7. import javax.persistence.Table;
  8. import javax.persistence.Transient;
  9. /**
  10. * 部门实体类
  11. *
  12. */
  13. @Entity
  14. @Table(name="department")
  15. public class Department {
  16. @Id
  17. @GeneratedValue(strategy=GenerationType.IDENTITY)
  18. private Long id;
  19. private String name;
  20. private Long parentId;
  21. private String description;
  22. private String parentName;
  23. @Transient
  24. private List<Department> childrens;
  25. public Long getId() {
  26. return id;
  27. }
  28. public void setId(Long id) {
  29. this.id = id;
  30. }
  31. public String getName() {
  32. return name;
  33. }
  34. public void setName(String name) {
  35. this.name = name;
  36. }
  37. public Long getParentId() {
  38. return parentId;
  39. }
  40. public void setParentId(Long parentId) {
  41. this.parentId = parentId;
  42. }
  43. public String getDescription() {
  44. return description;
  45. }
  46. public void setDescription(String description) {
  47. this.description = description;
  48. }
  49. public String getParentName() {
  50. return parentName;
  51. }
  52. @Transient
  53. public void setParentName(String parentName) {
  54. this.parentName = parentName;
  55. }
  56. public List<Department> getChildrens() {
  57. return childrens;
  58. }
  59. public void setChildrens(List<Department> childrens) {
  60. this.childrens = childrens;
  61. }
  62. }

  1. package cn.test.dao;
  2. import java.util.List;
  3. import org.springframework.data.jpa.repository.JpaRepository;
  4. import org.springframework.data.jpa.repository.Query;
  5. import cn.test.bean.Department;
  6. public interface DepartmentRepository extends JpaRepository<Department, Long>{
  7. @Query(value="select d.id,d.name,d.description,d.parent_id,temp.name as parent_name " +
  8. "from department d,department temp " +
  9. "where d.parent_id=?1 and if(d.parent_id=-1,d.id=temp.id,d.parent_id=temp.id)",nativeQuery=true)
  10. public List<Department> testAs(Long parentId);
  11. }

原文地址:https://blog.csdn.net/woshihm/article/details/93721300

spring data jpa使用别名--as的更多相关文章

  1. 干货|一文读懂 Spring Data Jpa!

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa!其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring D ...

  2. 实例对比 hibernate, spring data jpa, mybatis 选型参考

    原文: 最近重构以前写的服务,最大的一个变动是将mybatis切换为spring data jpa,切换的原因很简单,有两点:第一.它是spring的子项目能够和spring boot很好的融合,没有 ...

  3. Spring Boot2 系列教程(二十三)理解 Spring Data Jpa

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa! 其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring ...

  4. Spring Data Jpa (四)注解式查询方法

    详细讲解声明式的查询方法 1 @Query详解 使用命名查询为实体声明查询是一种有效的方法,对于少量查询很有效.一般只需要关心@Query里面的value和nativeQuery的值.使用声明式JPQ ...

  5. Spring Data JPA 查询结果返回至自定义实体

    本人在实际工作中使用Spring Data Jpa框架时,一般查询结果只返回对应的Entity实体.但有时根据实际业务,需要进行一些较复杂的查询,比较棘手.虽然在框架上我们可以使用@Query注解执行 ...

  6. Spring Data JPA 自定义对象接收查询结果集

    Spring Data JPA 简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和 ...

  7. Spring Data JPA 在 @Query 中使用投影的方法

    Spring Data JPA 在 @Query 中使用投影的方法 关于投影的基本使用可以参考这篇文章:https://www.baeldung.com/spring-data-jpa-project ...

  8. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

  9. spring boot(五):spring data jpa的使用

    在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...

随机推荐

  1. https://vjudge.net/problem/2198221/origin

    https://vjudge.net/problem/2198221/origin逆向思维,原题是人出来,我们处理成人进去,算出来每个人的曼哈顿距离,然后从大到小排序,距离长的先入.走的距离+这个人从 ...

  2. bzoj 1053 [HAOI2007]反素数ant——关于质数的dfs / 打表

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1053 写了个打表程序. #include<iostream> #include& ...

  3. [转]Event loop——浏览器和Node区别

    最近对Event loop比较感兴趣,所以了解了一下.但是发现整个Event loop尽管有很多篇文章,但是没有一篇可以看完就对它所有内容都了解的文章.大部分的文章都只阐述了浏览器或者Node二者之一 ...

  4. 爬虫之robots.txt

    robots是网站跟爬虫间的协议,用简单直接的txt格式文本方式告诉对应的爬虫被允许的权限,也就是说robots.txt是搜索引擎中访问网站的时候要查看的第一个文件. 当一个搜索蜘蛛访问一个站点时,它 ...

  5. Leetcode24.Swap Nodes in Pairs两两交换链表中的节点

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能使用常数的 ...

  6. 有趣的HTML5 Web SQL 数据库

    Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs. 核心方法 以下是规范中定义的三个核心方法: openD ...

  7. golang之if

    1.if语句 (1)if (2)if else (3)if esle ...else

  8. TSQL:让监控分析更简单更高效

    1. 前言 阿里时序时空数据库TSDB最新推出TSQL,支持标准SQL的语法和函数.用户使用熟悉的SQL,不仅仅查询更简单易用,用户还可以利用SQL强大的功能,实现更加复杂的计算分析. 2. 为什么需 ...

  9. RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占优势

    美国时间3月4-8日,国际知名信息安全峰会RSA Conference在美国旧金山开幕,云安全及云可以为企业提供更可靠的资产管理方式成为大会热点. 此次峰会共吸引全球700多家机构参展,其中近42%为 ...

  10. 【python之路18】内置函数,补充请看【python之路46】

    1.abs(number)表示某个数字的绝对值 print(abs(-123)) #打印出123 2.all(iterable) 表示可迭代的参数全部为True那么返回True,否则返回False r ...