给你们讲讲一个使用springboot+jsp+JPA+Hibernate+DM的项目:
第一个:不要随意使用jpa的@Query:
理由:
DM数据库不识别if符号,认为你这个是错误sql
@Query(value = "select * from xxx where if(?1 !='',x1=?1,1=1) and if(?2 !='',x2=?2,1=1) and if(?3 !='',x3=?3,1=1) ",nativeQuery = true) List<XXX> find(String X1,String X2,String X3);
第一次使用@Query时候你会不适应,那个案例说一般我们在xml映射文件中写查询sql:select user_name,age,create_time from sys_user,但是在jpa的@Query中写的是对应实体类的字段不是对应数据库表的字段select o.userName,o.age,o.createTime from sysUser
第一次使用或者看@Query中的sql你会发现有这个的代码
`@Query("select a from SysUser where userId =?1 and userName =?2 and age=?3")
List selectAll(String userId,String userName,String age);
@Query("select a from SysUser where userId =:userId and userName =:userName and age=:age") List selectAll(String userId,String userName,String age);` 虽然我们看的能明白是什么意思但是总有点怪 在使用JPA时候一定要学习它的注解,一定要去官网上查 第二点:JPA中有可以自动生成数据表结构的配置一定要注意不要随便在实体类中写字段 有的人写代码按阿里规范vo dto entity 的方法来写,喜欢将展示字段和数据库对应的字段都写在一起,但是jpa将实体类下的所有字段都是表中的字段了 第三点就是@OneToOne 和@ManyToOne的某个关键字段 当使用jpa自带的查询findOne、findAll等它会将你对应关联表字段的实体类也查出了,有一种情况当表A关联表B时,表B有一条数据被物理删除时,表A根据关联的id查询不到这个被删除的数据时,会提示报错。 当你删除表B数据时,你有可能删除不了,原因是这条数据有关联关系。必须要同时删除关联关系的那条数据。 问题来了,操作人员不想有和表B关联上的表A或者某表时,开发人员只能将关联表对应的外键id设置空或者在删除时在关联外键上加一个注解。