簡體   English   中英

休眠方式不會引發StaleObjectStateException(請勿進行樂觀鎖定)

[英]Hibernate IS NOT throwing StaleObjectStateException (DO NOT DO OPTIMISTIC LOCKING)

我在這里感到困惑。 我想在我的Spring休眠程序中實現樂觀鎖定,但是即使我在單獨的瀏覽器中打開數據並單獨更新它,休眠也不會引發StaleObjectStateStateException。

我的道看起來像這樣:

public void update(User user) throws StaleObjectStateException{       
sessionFactory.getCurrentSession().saveOrUpdate(user);
}

我的Pojo看起來像這樣:

@Version@Temporal(TemporalType.TIMESTAMP)
@Column(name="timestamp", length=19)
public Timestamp getTimestamp() {
return this.timestamp;
}

Config.xml

<bean name="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
    <property name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
</bean>
<tx:annotation-driven />
<bean name="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

我不懷疑為什么不拋出異常的原因之一是,在更新時,由於保持了數據,另一個會話時間戳也會更新? 請幫忙。

佩里

我看到您正在使用Spring事務管理器。 因此,我假設您在某處具有@Transactional批注來跟蹤您的交易。 在這種情況下,我認為不是在執行類的update方法時而是在提交事務時拋出StaleObjectStateException 而且我還認為spring會將休眠異常包裝到HibernateOptimisticLockingFailureException 因此,您需要向標有@Transactional批注的方法添加throws聲明。 如果您沒有任何事務注釋,則需要在Dao中添加一些注釋或使用手動事務處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM