Tag - hibernate

java hibernate    2017-07-19 23:47:47    128

因为我使用的是hibernate的注解配置,错误出在使用ManyToOne并进行级联查询的时候,我的注解配置是这样的

@ManyToOne(fetch = FetchType.LAZY,cascade=CascadeType.ALL)

原因是因为FetchType.LAZY相当于配置文件中的lazy设置为true,

解决办法就是改为

@ManyToOne(fetch = FetchType.EAGER,cascade=CascadeType.ALL)


在使用配置文件的时候也是会出现这个错误的,具体修改方式雷同,即把lazy设置为false

 


 

by 刘迎光@萤火虫工作室
OpenBI交流群:495266201
MicroService 微服务交流群:217722918
mail: liuyg#liuyingguang.cn
博主首页(防止爬虫):http://blog.liuyingguang.cn
OpenBI问答社区:http://openbi.liuyingguang.cn/

hibernate java    2017-07-19 23:01:10    3

做了不少项目,遇到不少hibernate配置,对于hibernate.connection.autocommit值的设置,存在很多争议,一些人认为应该设置为true,一些人认为应该设置为false,而我坚决选择后者,下面就来讲讲我的理由吧


1、当在做业务系统的时候,大家都知道会在同一个操作中,一个业务可能包含多个子业务,那么就要进行多次提交,假设“业务A”中包含“子业务1”、“子业务2”、“子业务3”,如果是自动提交,那么可能的结果是子业务的其中一项或两项提交成功,而另一项提交失败,会回滚(这样的结果明显不符合我们惯有的思维);正确的结果,应该是,只要有一项提交失败,那么全体回滚。以事务的角度来说,整体应该属于同一事务,而自动提交的方式,明显不属于同一事务,数据混乱,也是难免的

2、对于并发写入比较高的应用,应尽量减少数据库交互,而hibernate框架一般都是单条操作,若想批量提交,hibernate.connection.autocommit值是必须设置为false的,常用的手段就是在此值设置为false的情况下,将要insert或者update的对象放到集合中,使用merge方法与flush结合的方式进行批量提交


不少人(包括经验丰富的老工程师)都认为,为什么使用hibernate,为什么使用自动提交,就是因为其方便,事务由hibernate来管理,而不用手动提交,简单很多,我很奇怪,做的明明是业务系统,为什么使用的却是自动提交的方式,并且存在问题是必须的,这些问题会随着时间逐渐显露,至于为什么,我也不了解了
 
 

 

by 刘迎光@萤火虫工作室
OpenBI交流群:495266201
MicroService 微服务交流群:217722918
mail: liuyg#liuyingguang.cn
博主首页(防止爬虫):http://blog.liuyingguang.cn
OpenBI问答社区:http://openbi.liuyingguang.cn/

hibernate java exception    2017-07-19 22:13:27    50

Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist  

今天 用JPA保存数据的时候出现此错误。

 

原因:   ID生成策略  我设置的自动。但是代码里面还是手动给对象ID设置了值

 

解决方案: 去掉手动给ID设置值的代码即可。


如:

 @Id

 @GeneratedValue(strategy = GenerationType.IDENTITY)

 @Column(name = "id", unique = true, nullable = false)


这种情况下,会报错,因为对id仅仅是设置了主键,并没有设置自增长,将

    @GeneratedValue(strategy = GenerationType.IDENTITY)

去掉即可

 

 


 

by 刘迎光@萤火虫工作室 
OpenBI交流群:495266201 
MicroService 微服务交流群:217722918 
mail: liuyg#liuyingguang.cn 
博主首页(==防止爬虫==):http://blog.liuyingguang.cn