springboot获取hibernate的session进行更精细的SQL操作,默认的jpa并不能满足一些复杂需求(可能是我把需求设计复杂了)
通过查看JpaRepository的底层实现,发现是通过EntityManager进行数据库会话操作,因此进一步获取它管理的会话。

    @Autowired
private UserDao userDao;
@Autowired
private EntityManager entityManager; @Transactional// 涉及更新删除,需要开启事务
@Override
public void run(ApplicationArguments args) throws Exception {
// 获取会话,,,使用 unwrap 返回 EntityManager 的底层实现
Session session = entityManager.unwrap(Session.class); User byUsername = userDao.findByUsername("123");
if (byUsername == null) {
User user = new User();
user.setUsername("123");
user.setPassword("123");
user.setNickname("管理员");
session.save(user);
// springboot 2.3.12 使用的是 hibernate 5.4.x
List username = session.createQuery("from User u where username=:username")
.setParameter("username", "123").list();
System.out.println(username); Role role = new Role();
role.setName("admin");
session.save(role); UserToRole userToRole = new UserToRole();
userToRole.setUser(user);
userToRole.setRole(role);
session.save(userToRole); Authority authority = new Authority();
authority.setUrl("/**");
session.save(authority); Menu menu = new Menu();
menu.setUrl("/index");
menu.setSeq(0);
menu.setTitle("主页");
session.save(menu); session.save(new RoleToAuthority(role, authority));
session.save(new RoleToMenu(role, menu));
}
// 此处要注意 使用User的细节
List username = session.createQuery("from User u where username=:username")
.setParameter("username", "123").list();
System.out.println(username);
}

我们注意到上面使用User的细节,不是使用表名ad_user,而是直接使用实体User,

@Entity
@Table(name = "ad_user") // import javax.persistence.Table
@org.hibernate.annotations.Table(appliesTo = "ad_user", comment = "用户表")
@Data
public class User // 对应 User
List username = session.createQuery("from User u where username=:username")
.setParameter("username", "123").list();
@Entity(name = "ad_user")
//@Table(name = "ad_user") // import javax.persistence.Table
@org.hibernate.annotations.Table(appliesTo = "ad_user", comment = "用户表")
@Data
public class User // 对应 ad_user
List username = session.createQuery("from ad_user u where username=:username")
.setParameter("username", "123").list();

建议使用第一种!

springboot-jpa获取session的更多相关文章

  1. SpringBoot JPA懒加载异常 - com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy

    问题与分析 某日忽然发现在用postman测试数据时报错如下: com.fasterxml.jackson.databind.JsonMappingException: could not initi ...

  2. Springboot Jpa: [mysql] java.sql.SQLException: Duplicate entry 'XXX' for key 'PRIMARY'

    前言 1.问题背景 偶尔会出现登录请求出错的情况,一旦失败就会短时间内再也登录不上,更换浏览器或者刷新可能会暂时解决这个问题. 项目运行日志如下: 2022-07-21 09:43:40.946 DE ...

  3. 补习系列(19)-springboot JPA + PostGreSQL

    目录 SpringBoot 整合 PostGreSQL 一.PostGreSQL简介 二.关于 SpringDataJPA 三.整合 PostGreSQL A. 依赖包 B. 配置文件 C. 模型定义 ...

  4. 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础授权权限

    上一篇<[原]无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限>介绍了实现Shiro的基础认证.本篇谈谈实现 ...

  5. 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限

    开发环境搭建参见<[原]无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页> 需求: ① 除了登录页面,在地址栏直接访问其他 ...

  6. 解决SpringBoot+JPA中使用set方法时自动更新数据库问题

    项目进行了三分之二了,突然出现一个很诡异的bug,数据库存储的用户表中密码信息总是自动消失一部分,头疼了几天后突然想起同事有个对低权限用户查询的用户信息向前台传送时会把密码设成null后再传输,心想是 ...

  7. SpringBoot Jpa入门案例

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons) 我们先来了解一下是什么是springboot jpa,springboo ...

  8. 基于SpringBoot+Redis的Session共享与单点登录

    title: 基于SpringBoot+Redis的Session共享与单点登录 date: 2019-07-23 02:55:52 categories: 架构 author: mrzhou tag ...

  9. SpringBoot 集成 Spring Session

    SpringBoot 集成 Spring Session 应该讲解清楚,为什么要使用 Redis 进行 Session 的管理. Session 复制又是什么概念. Spring Session 在汪 ...

  10. Springboot+JPA下实现简易爬虫:豆瓣电视剧数据

    Springboot+JPA下实现简易爬虫:豆瓣电视剧数据 前言:今天听到产品那边讨论一些需求,好像其中一点是用户要求我们爬虫,在网页上抓取一些数据然后存到我们公司数据库中,众所周知,爬虫的实现对于p ...

随机推荐

  1. mpi转以太网连接200plc以太网监控同时与步科触摸屏通信

    西门子PLC200 226PLC转以太网通过PPI-ETH-XD1.0集中采集不占用编程口同时与步科触摸屏通信 现有设备及联网要求客户车间内有6台纺机设备,控制系统采用西门子PLC,型号为CPU226 ...

  2. day02 数据类型转换 运算符 方法

    数据类型转换 自动类型转换 强制类型转换 1. 自动类型转换:就是范围小的向范围大的转换  将取值范围小刀的类型自动提升为取值范围大的类型. 转换规则  byte.short.char  int--- ...

  3. 彻底弄懂ip掩码中的网络地址、广播地址、主机地址

    本文为博主原创,转载请注明出处: 概念理解: IP掩码(或子网掩码)用于确定一个IP地址的网络部分和主机部分.它是一个32位的二进制数字,与IP地址做逻辑与运算,将IP地址划分为网络地址和主机地址两部 ...

  4. React跨路由组件动画

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:佳岚 回顾传统React动画 对于普通的 React 动画 ...

  5. Newstar CTF 2023

    WEEK1 PWN 1.ezshellcode 直接sendline(shellcode)即可 exp: from pwn import * p = remote("node4.buuoj. ...

  6. 大一下c语言课程设计

    // // main.c // 高级语言课程设计图书管理系统 // // Created by 蔡星旖 on 2022/8/1. // #include <iostream> #inclu ...

  7. P7073 [CSP-J2020] 表达式

    Problem 考察算法:后缀表达式建树,优化. 题目简述 读入一个后缀表达式,由 \(\&,\mid,!\) 三种运算和操作数构成. 有 \(q\) 次询问,每次输入一个下标 \(i\) , ...

  8. PXE批量网络装机

    PXE高效批量网络装机 系统装机的三种引导方式 1.硬盘 2.光驱(u盘) 3.网络启动 pxe 系统安装过程 加载boot loader Boot Loader 是在操作系统内核运行之前运行的一段小 ...

  9. 在RT-thread studio 中生成 Doxgen文档

    转载自RTT论坛 实测可以使用

  10. SpringCloud全链路灰色发布具体实现!

    灰度发布(Gray Release,也称为灰度发布或金丝雀发布)是指在软件或服务发布过程中,将新版本的功能或服务以较小的比例引入到生产环境中,仅向部分用户或节点提供新功能的一种发布策略. 在传统的全量 ...