ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 一、包的路径扫描增加灵活性 ``` @SpringBootApplication @EnableConfigurationProperties({ GloabalProperties.class }) @EnableJpaRepositories({ "com.*", "org.ray" }) @EntityScan(basePackages = { "com.*", "org.ray" }) @ComponentScan(basePackages = { "com.*", "org.ray" }) public class RayframeworkApplication { public static void main(String[] args) { SpringApplication.run(RayframeworkApplication.class, args); } } ``` ## 二、JAP实体中属性 如果需要在实体中定义额外的属性,必须标注@Transient,否则,默认会当做COLUMN处理; ## 三、持久化对象返回值 持久化之后,返回的对象,才是持久化之后的对象(主键获得了赋值),而原对象依然是普通对象(主键为0); 举例说明: ``` SysStaff staffObj = staffPost.getStaff(); SysStaff persisted =sysStaffDao.save(staffObj); ``` 代码里面,staffObj 的id值在或许依然为0,只有persisted 的id就真正获得了数据库返回的主键了; >[danger] > 1、本规则成立的前提是实体定义的时候,如果主键和@version字段采用的是包装类型; > 2、如果主键和@version字段采用的是基础数据类型,那么,两者,就都能够实时获取到id了,上述规则无效; ## 四、乐观锁问题 实体定义的时候,主键和@version字段,都采用基础数据类型,这个作为前提: 1、新增的时候,version的赋值没有决定意义,都可以; 2、修改的时候,如果该主键的值并不存在,那么,version的赋值也就没有决定意义,系统会新插入一条数据(新插入数据的主键未必是赋值的主键,而是依据自增生成的值),跟新增逻辑完全一致; 3、修改的时候,如果该主键的值是存在的,但version的值如果不吻合,会触发乐观锁异常;