Spring data Jpa使用过程中遇到的坑

  1. 一定要注意如果我们在实体类中没有配置数据表的默认值,那么在存入和取出的时候应该设置。否则在取出的时候就会出现问题。
  2. 如何通过一方获取到多方实体
  3. jsp中 jsp文件夹与上面servlet映射名最好不要一致,这样会出问题
  4. 注意!!!!一个实体类的表ID名字请设置为ID,保证不出错。
  • 问题1

    • 问题描述

      • 分类和博客 多对多 双向 我这里配置中间表来实现实体类的关联
      • 我现在想要通过策略实体获取所有博客,在打印blog时,准确的说是在调用blog的getCategories时 出现stackoverflow的问题。
    • 问题分析:

      • 因为是双向多对多的关联查询,每一个blog实例会输出Set categories的值,而每一个Category实例则会输出Set blogs的值,因此一直递归下去知道栈溢出报错。
    • 解决方法—其实一般情况下没有打印的需求

      • 方法一:遍历的时候不调用或者先将blogs设置为null

        category.getBlogs().forEach(x->{
          		x.setCategories(null);
          		System.out.pringln(x);
        });
        
      • 方法二:改为单向多对多。将另一方的引用删掉即可

    • 然后想到使用原生sql来获取博客。但是我之前配置的是中间表,然后就很尴尬的表示如何搞。

      1. 我们关联查询来获取博客
  • 问题2

    • 注意:使用jpa由于是与底层打交道,所以在开发过程中改表的话,有可能造成以前的记录查出来不能放入实体类中的情况。所以这点要注意 要么一开始不改表,要么一定谨慎。
  • 问题3

    • 由于我在写web层代码时通过异常的状态码来分发响应,而我判断的范围太广泛了,导致原来的异常栈被覆盖,从而让我在这里浪费了大量时间,所以一般在最后打印一下异常栈。这样有助于及时查找错误。
  • 问题4

    • 在使用Spring-data-jpa的Example进行多条件查询过程中。由于我实体使用的是基本数据类型,所以导致sql判断条件中总是有很多的默认条件;
    • 原因是java会给实体类的基本类型的属性进行赋值,而Example 只会忽略默认值为空的属性。导致查询失败。
    • 解决方法:将实体类的属性改为包装器类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值