zhangzhenhuajack / spring-data-jpa-guide

spring-data-jpa-guide,Spring Data JPA实战,SpringDataJpa详解
http://www.jackzhang.cn/spring-data-jpa-guide/
379 stars 164 forks source link

网友问题详解 #26

Open zhangzhenhuajack opened 3 years ago

zhangzhenhuajack commented 3 years ago

作者你好,我看了你的书,有几个问题,想咨询一下

1、Spring Jpa data中的配置比较复杂,尤其是关联关系,容易出错。有没有工具可以自动生成这些配置。在网上看到的,大部分是Mybatis的自动生成工具,也有少量的jpa的自动生成工具,但是都没有针对配置关系的生成工具?
有:IDEA就可以做到;参考: https://gitbook.cn/new/gitchat/activity/5a5405edf6e6d01dea2d5e23
2、Spring Data Jpa 与JPA+hibernate 现在哪个更容易在项目中使用?
我们公司所有项目都是JPA,没有什么区分,就看你掌握的熟悉不熟悉;
3、事务的传播,如果A,与B的事务配置属性不一样,那么传播的会选择事务的并集合还是交集还是忽略后面的事务? 这看你的事务的传播机制怎么设置的呀,建议详细了解一下spring的事务7种传播机制; 4、在一个方法中,Mybatis与Spring Jpa data共用的时候,会采用哪个事务?JPA的一级缓存是否要手动flush? 1)建议不要混用,都微服务化了,为什么要混用? 2)即使混用,事务时spring管理的和Mybatis和JPA有什么关系呢?看你的每个方法上的事务传播机制的设置有关系呀; 3)个人认为不需要;原理可以仔细看下老师拉钩上的文章(21章和28章):https://kaiwu.lagou.com/course/courseInfo.htm?courseId=490&sid=20-h5Url-0&buyFrom=2&pageId=1pz4#/detail/pc?id=4721
5、如果在企业的信息管理系统中,数据表有100多张。如发票到账,分包等。这些表之间有关系,如果在对象层面也建立这些对象的双向关系,是否会导致在flush的时候,冲突的概念会很高,因为每次flush的时候,要对比所有关联的对象的状态变化,然后可能会更新多个表? 1)如果早期对关联关系不熟悉,建议不要建关联关系,和mybatis的思路一样,就是普通的单表对象,自己做关联查询; 2)即使配置了关联关系,也可以通过设置CascadeType不做级联更新;详细推荐看老师拉钩上的第07章:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=490&sid=20-h5Url-0&buyFrom=2&pageId=1pz4#/detail/pc?id=4707
6、针对历史库的脏数据检查 有一些历史库,因为没有建立数据库层面的约束关系,由应用程序来维护数据的约束关系。性能上提高了,但是数据一致性会存在问题。(ps:有什么关系呢?) 现在希望通过JPA建立关系,通过一系列规则类。(这些规则类,可采用策略模式或责任链模式进行组合),来找出脏数据具体的条目。 如,在子表中,逻辑外键为null。或子表中逻辑外键,不在主表中的等。 针对这个规则,读数据库中的表,然后运行这个规则进行检测。

   JPA有这样的应用场景吗?

无,存的业务逻辑呀,和JPA有什么关系呢?

7、针对Hibernate材料比jpa多,JPA的资料比SpringData Jpa多。 Spring Jpa Data 的的官方材料在什么地方,没有找到合适的 看老师的github首页,资料都放上面了:https://github.com/zhangzhenhuajack/spring-data-jpa-guide

作者你好,我看了你的书,有几个问题,想咨询一下,我补充一下昨天的内容

1、JPA的适用场景 如果在企业的信息管理系统中,数据表有100多张。如项目,合同,发票到账,分包等。这些表之间有关系,如果在对象层面也建立这些对象的双向关系,是否会导致在flush的时候,冲突的概率会很高,因为每次flush的时候,要对比所有关联的对象的状态变化,然后可能会更新多个表? 否则会出现性能问题 所以,JPA适合与多大规模的数据表关系 或对象关系?企业的ERP系统适合用JPA的技术吗,尤其它的复杂的关联关系? 如果在对象层面,有100多个对象之间有关系,是否导致JPA的使用会出现性能,冲突等问题。 没有适合与不适合只说,只看你用的对不对。把100多个对象都建立其关联关系,老师看到这样的代码其实有点打人,维护性太差。
2、事务 2.1、在Java程序代码中,JDBC连接数据库的时候,会有BeginTranaction,这个动作,是否仅获取数据库连接及事务属性。只有在Commit的时候,才锁定数据库中表记录或行记录? flush的时候就会锁定数据,不是在commit的时候。详见老师拉钩上文章介绍吧;19章 ; 2.2、事务的传播,如果A,与B的事务配置属性不一样,那么传播的会选择事务的并集合还是交集还是忽略后面的事务? 重复
2.3、在一个方法中,Mybatis与Spring Jpa data共用的时候,会采用哪个事务?JPA的一级缓存是否要手动flush? 重复
3、最新版本的JPA,SpringBootJPAData英文版本链接网址? 哥,这个问题有点搓呀,官方文档都找不到吗?https://docs.spring.io/spring-data/jpa/docs/2.5.1/reference/html/
4、JPA一级缓存如果在事务隔离的设置中,如果采用Repeatable隔离级别,一级缓存的数据,是否会不是最新的? 因为其他事务可能更新数据 但是该Session并不知道。换句话说,一级缓存在什么时候会更新它的缓存? merge或者 find的时候。 想看老师拉钩文章21和22章; 5、在程序设计中,推荐采用显式方式进行persist操作,还是在事务commit的时候,由缓存 Dirty 机制来进行直接更新? 推荐jpa自己的机制。save够用了;
6、N+1的问题,是否要通过检测sql的输出来进行观察,在设计阶段,根据规则,是完全可以避免的吗? 完全可以。见25,26章:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=490&sid=20-h5Url-0&buyFrom=2&pageId=1pz4#/detail/pc?id=4725
7、我们想用SpringDataJPA来实现前后端分离的快速开发。当前的思路如下 (1) 设计领域对象 (2) 构建对象关系 (3) 自动产生数据表 (4) 代码工具自动生成前端,后端代码(如Jeecg等,有权限,报表等) (5) 补充一下前端页面 (6) 增加一些查询的类,提供给前端作为数据组合使用 这种思路您感觉可行吗? 可以呀,推荐熟悉一下jaeger/jsonapi;或者spring data rest;
8、Spring Jpa data中的配置比较复杂,尤其是关联关系,容易出错。有没有工具可以自动生成这些配置。在网上看到的,大部分是Mybatis的自动生成工具,也有少量的jpa的自动生成工具,但是都没有针对配置关系的生成工具? 重复 9、Spring Data Jpa 与JPA+hibernate 现在哪个更容易在项目中使用? 哥,JPA就是由hibernate实现的。看场景自由选择;
10、针对历史库的脏数据检查 有一些历史库,因为没有建立数据库层面的约束关系,由应用程序来维护数据的约束关系。性能上提高了,但是数据一致性会存在问题。 现在希望通过JPA建立关系,通过一系列规则类。(这些规则类,可采用策略模式或责任链模式进行组合),来找出脏数据具体的条目。 如,在子表中,逻辑外键为null。或子表中逻辑外键,不在主表中的等。 针对这个规则,读数据库中的表,然后运行这个规则进行检测。

JPA有这样的应用场景吗? 重复 11、数据库的持续集成的问题,有无合适的框架或方法论 有一个概念叫:java db migration ;不知道你说的是不是这个,推荐:flywaydb,gradle有插件;另外gitlab+ci/cd也可以做到;