原文地址:https://www.miaoroom.com/code/note/mybatis-debug-notes.html
出处:喵容
本文会零零碎碎的更新自己在学习 Java持久层
碰到的问题和解决办法,希望这些踩坑的历程能给需要的你带来帮助。
由于文章主要为 Spring Data JPA
和 Mybatis
的内容。
1. org.hibernate.AnnotationException: No identifier specified for entity:
private Integer categoryId;
这个错误看上去是这张表没有主键,在使用hibernate的映射表的时候entity类是必须要主键的,否则就会报出这个异常。所以解决如下,添加自增的ID主键:
@Id
@GeneratedValue
private Integer categoryId;
如果我们已经配置了@ID,还会报这个错误是因为import错包了,错误的使用了org.springframework.data.annotation.Id包。
当我们使用@Entity的时候,提示我们Entity过时,被划了横线,是因错误的引用了org.hibernate.annotations.Entity包,这里应该使用JPA的注解javax.persistence.Entity,而不是hibernate的。
Table ‘XXX.hibernate_sequence’ doesn’t exist
在实体中,将ID生成略组改成@GeneratedValue(strategy = GenerationType.IDENTITY)。
如以下:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer categoryId;
删测试数据很麻烦
在方法前加上 code>@Transactional 注解,会让你当前的事务操作在执行完成后完全回滚。若执行完未报错,则意为测试通过。可搭配Aseert
断言使用,这样便省去了我们测试完还要删除测试数据的多余操作。
‘PageRequest(int, int)’ is deprecated
PageRequest类使用的时候利用new一个对象的时候报错,所这个方法过时了,解决方法
PageRequest pageRequest=new PageRequest(int ,int );//提示方法过时
应该使用
PageRequest request = PageRequest.of(0,1);
一对多查询 java.lang.IllegalStateException: No typehandler found for property
在使用tk.mybatis建立实体的时候我们使mapper继承myMapper不需要我们对mapper.xml文件中写很多重复的代码了,如果因为表中没有实体中对应的字段而出现错误Caused by: java.lang.IllegalStateException: No typehandler found for property xxx,这种情况下就需要你去排查字段。
- 如果你有字段没能和数据库中的对应,应该使用@Column(name = "xxx")或者直接把变量名叫的和数据库中字段名字相同。
- 当有时我们需要忽略这些字段,那么就可以使用@Transient来加在这个字段的头上。
- 如果此时你的程序依旧这样报错,就检查你所有的实体,把所有的实体都检查一遍,修改之后这时你的程序应该就没有错误了。
mybatis传入单个或多个参数
1、传入一个参数时
id为mapper接口中的方法名,resultMap为返回类型,parameterType为输入参数的类型
对应的xml配置:
2、传入多个参数时
mapper接口配置:
对应的xml配置:
由于是多参数那么就不能使用parameterType, 这里用@Param来指定哪一个
一一一一