发布网友 发布时间:2022-04-11 23:50
共3个回答
懂视网 时间:2022-04-12 04:11
1. Hibernate数据库中明明有,但是Get总返回null Oracle的CHAR(15)类型,如果字符串ID不足15个字符,则会自动用空格补齐。 虽然在Sql Plus工具查询的时候,不需要补齐空格。 但是在Hibernate查询的时候需要补齐的。 这也是为何Hibernate get查询的时候,数据
1. Hibernate数据库中明明有,但是Get总返回null
Oracle的CHAR(15)类型,如果字符串ID不足15个字符,则会自动用空格补齐。
虽然在Sql Plus工具查询的时候,不需要补齐空格。
但是在Hibernate查询的时候需要补齐的。
这也是为何Hibernate get查询的时候,数据库中明明有,却返回null的原因之一
2.Hibernate在插入记录的时候,commit等待、假死、不执行下一步的根本原因
Hibernate在插入记录的时候,如果ID(主键值)重叠,则会等待,奇怪。根本原因在于
SQLPlus或者Hibernate操作该数据表没有提交导致。当然如果已经提交了,ORACLE不要求
Hibernate等待的时候,Hibernate本身会抛出异常。
比如SQL PLUS 用delete from school where id=1;但执行完后没有commit
然后Hibernate 要插入id=1的记录,那么ORACLE将让Hibernate等待,一面出现了错误的逻辑。
(感觉ORACLE或者Hibernate也没有设计得多好,因为在Hibernate因为SQL PLUS没有提交时而
等待,但是SQL PLUS 提交(commit)后还是等待,没有事件通知功能)
热心网友 时间:2022-04-12 01:19
嘻嘻.这个吧,设置了自增长 还有手动设置. 没有这个必要吧.其实以前的时候也经常做这些事.可是后来一个老师说了一句话 "知水浅而非暗礁!" 变成不要去在意这么多暗礁,只要知道设置了自增长就不用 手动设置了. 充其量就是 人家在写Hibernate的时候 少写了 一个Exception 么. 写了这么多也不沾边, 那就说说 save 和persist 的区别吧. save 会返回可序列的 id值, 而persist 没有返回值, 从这个地方来看,save 要马上产生一条 insert 语句.而persist 则是在外部调用的时候才会产生. 所以在封装一个 长会话流程的时候 persist 比较好用.热心网友 时间:2022-04-12 02:37
persist把一个瞬态的实例持久化,但是并"不保证"标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。