
Spring Data JPA
使用JPA过程中的一些记录
☞十一
小z要发光
展开
-
SpringData Jpa 之 Specification 构建子查询
一些简单的查询条件使用 SpringData Jpa 提供的查询方法和按命名规则匹配的方法就能完成,当面对复杂查询时,需要使用 Specification 来动态构建查询条件。使用 Specification 构建子查询 :private Specification<Post> buildSpec(@NonNull ParentParam parentParam) { return (parentRoot, criteriaQuery, criteriaBuilder) -原创 2020-11-30 19:04:16 · 1843 阅读 · 0 评论 -
SpringData Jpa 之 修改、删除数据
Tips:如果修改或删除的方法没有被事务管理,需要在方法上加上 @Transactional修改和删除的方法返回值可以是 void 或者是 int,当是 int 时,返回 1 代表成功,0 代表失败删除方法可以不使用 @modify 和 @Query 注解,直接通过命名规则的方法删除1、修改数据,使用 @Modify 和 @Query 注解@Modifying@Query("update User u set u.firstname = ?1 where u.lastname = ?2")原创 2020-11-30 15:25:57 · 3964 阅读 · 0 评论 -
SpringData Jpa 之 Example 查询
一、简介 按例查询(Query By Example)是一种用户界面友好的查询技术。 它允许 动态创建 查询,并且不需要编写包含字段名称的查询。 实际上,按示例查询 不需要 使用特定的数据库的查询语言来编写查询语句。1、按例查询(QBE)由三部分组成:Probe:带有填充字段的域对象的实际示例ExampleMatcher:ExampleMatcher 提供关于如何匹配特定字段的详细信息,它可以跨多个示例重用Example:示例包括 Probe 和 ExampleMatcher ,它用于创建查原创 2020-11-24 14:49:55 · 5045 阅读 · 2 评论 -
Spring Data JPA 中 getOne、findById、findOne 的区别
1、getOne 方法(为null时会报错慎用) getOne 是一个延迟加载方法,它并不立即访问数据库,而是返回一个代理(proxy)对象,这个代理对象是对实体对象的引用,仅在 使用代理对象访问对象属性时才会去真正访问数据库 ,如果找不到,则抛出 EntityNotFoundException。源码:public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryB原创 2020-11-23 17:28:36 · 1660 阅读 · 2 评论 -
SpringJPA使用时 LazyInitializationException: could not initialize proxy - no Session
解决方法:在配置文件中添加 enable_lazy_load_no_trans: truespring jpa: properties: hibernate: # 把懒加载变为立即加载,即使没有 Session 也能查询到数据。(查询所有数据都会立即加载数据,会影响性能) enable_lazy_load_no_trans: true在实体上使用注解 @Proxy(lazy = false)把某个实体的懒加载变为立即加载,即使没有 S原创 2020-11-19 09:53:15 · 257 阅读 · 0 评论 -
@Qurey注解的使用
一、参数的传递使用?传递参数public interface UserRepository extends JpaRepository<User, Long> { @Query("select u from User u where u.emailAddress = ?1") User findByEmailAddress(String emailAddress);}使用:参数名传递参数public interface UserRepository ext原创 2020-11-06 13:37:13 · 5430 阅读 · 0 评论 -
JPA多条件查询时 部分条件为空
第一种使用@Querypublic interface UserRepository extends JpaRepository<User,Long> { //字符串类型在mysql为null时,为''字符串,如果为空,就使用1=1条件去查询 @Query(value = "select * from user where if(?1!='',name=?1,1=1) and if(?2!='',age=?2,1=1)" ,nativeQuery = true)原创 2020-11-06 10:14:24 · 4364 阅读 · 3 评论