Hibernate乐观锁之Timestamp注意点

<timestamp name="updDate" column="UPD_DATE"></timestamp>

这个必须跟在id定义之后

这使用AP服务器的时间,而不是DB服务器的时间,来更新数据库。

即更新数据库时使用的是new Date(),而不是sysdate。

如果要使用DB服务器时间来更新DB,必须加上source="db"

此时,hibernate会先从数据库中取出当前时间(select sysdate from dual),然后再用该时间进行更新。

并不是严格意义上的用sysdate更新数据库(update table1 set upd_date=sysdate ……)。

如果更新结果中没有毫秒信息,请检查Dialect,应使用org.hibernate.dialect.Oracle10gDialect。(Oracle9及其后续版本应该都支持毫秒)

不要使用org.hibernate.dialect.OracleDialect,该类已经被Deprecated。

使用org.hibernate.dialect.Oracle10gDialect之后,取DB时间的SQL会变为 select systimestamp from dual。


Hibernate使用Criteria,除了默认的关联条件之外,添加额外的关联条件:createAlias("xxxx", "b",Criteria.LEFT_JOIN,criteria)。


<set name="MUpdateFuncTabs" table="M_UPDATE_FUNC_TAB" inverse="true" lazy="false" fetch="join">

或者criteria.setFetchMode("MUpdateFuncTabs", FetchMode.JOIN)

在一般情况下,只执行一条SQL语句就能把主表和副表的数据都取回来。但是join会导致检索结果增多,结果件数为join之后的件数……

但是如果在criteria中指定了副表的关联查询条件

criteria.createAlias("MUpdateFuncTabs", "tabs", JoinType.LEFT_OUTER_JOIN, Restrictions.eq(MUpdateFuncTab.DEL_FLG, Constant.DEL_FLG_VALID));

那么,就会变成fetch="select"一样的效果,将会执行N条SQL语句以取得副表的数据。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值