「Java笔记」 持久层的踩坑之路(集中更新)

Mybatis-debug-notes

原文地址:https://www.miaoroom.com/code/note/mybatis-debug-notes.html
出处:喵容

本文会零零碎碎的更新自己在学习 Java持久层 碰到的问题和解决办法,希望这些踩坑的历程能给需要的你带来帮助。

由于文章主要为 Spring Data JPAMybatis 的内容。

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;

删测试数据很麻烦

在方法前加上 @Transactional 注解,会让你当前的事务操作在执行完成后完全回滚。若执行完未报错,则意为测试通过。可搭配Aseert断言使用,这样便省去了我们测试完还要删除测试数据的多余操作。

'PageRequest(int, int)' is deprecated

PageRequest类使用的时候利用new一个对象的时候报错,所这个方法过时了,解决方法

PageRequest pageRequest=new PageRequest(int ,int );//提示方法过时

应该使用

PageRequest request = PageRequest.of(0,1);

参与评论