Springboot + JPA配置项目总结:
本博客纯属个人笔记,提醒自己用:
-
数据库搭建的依赖?
JPA底层是机遇herbenate的,herbenate底层是基于JDBC的。gradle中要引入如下依赖:
implementation ‘org.hibernate:hibernate-core’ -
分层怎么分?
demo -
使用jpa还需要用flyway吗?flyway是控制版本用的,jpa在使用注解的时候也会往数据库里面构建对应的table,这样的话flyway还需要吗?
尝试一下先用flyway在数据库里面创建对应的table,再用jpa试试。
尝试过后发现,我在flyway脚本中设置默认值不会生效,但是notnull这种判断类型是否为空的会生效。比如,我在创建student的时候,数据库里面有一个属性为grouped not null default 0, 创建的时候如果不传这个值,就会报grouped不能为空的错。
奇怪的是,我之前创建的时候一直都是null,之前能成功,改了下po的名称一下子就报错了。(可能是属性和sql里面的名称需要对齐?,但是也应该报not null的错误啊)
解决办法: 直接在po里面赋值。但是仍然没有解决最根本的问题,jpa和flyway的工作有时候会重叠,谁的优先级更高?我觉得是用了jpa都没必要再用flyway来控制版本了。 -
jpa怎么自定义查询?
自带的一些方法 或者 JPQL -
cannot find da.migration
check compact file name -
@Id注解,标明主键
-
@Entity + @Table 指明对应sql哪一个
-
Not a managed type
百度的方法说是没有开启扫描,检查controller->service->reposiroty->entity是否都开启扫描了。开启了以后还是报错,后来发现是Entity传给JpaRepository的类型写错了,但是把注释全是删除了以后还是可以运行,不知道是为什么? -
401错误
demo目前不设计SpringSecurity-就把相关的依赖删了 -
consider defining a bean in configuration?
扫描了正确的位置,却没有把repository扫描进去 -
JPA的Repository层需要继承JpaRepository,并且把ID和对应的实体类传进去。
-
Repeated column in mapping for collection: com.meds.infrastructure.entity.ClassInfoPo.teachers column: id
定位到问题出现在了classInfoPo上。JoinTable中前者的id是本表的id,后者的id是关联表的id。我当时都用了id,就重复了。 -
class和teacher的映射关系怎么体现?
两个表设置了关联关系之后,会生成一个中间表,携带了两者的id。问题来了,如果我想通过teacher的id来查询一个teacher对应的class的id和name怎么查? -
每次重启后数据库数据就被清空了
ddl-auto:create----每次运行该程序,没有表格会新建表格,表内有数据会清空。
ddl-auto:create-drop----每次程序结束的时候会清空表。
ddl-auto:update----每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新。
ddl-auto:validate----运行程序会校验数据与数据库的字段类型是否相同,不同会报错。
参考: https://blog.csdn.net/qq_31279347/article/details/91125414
- 查询没有分组的学生信息失败
是不是因为is_to_class = ?的问题.
命名应该是没有问题