3

私は休止状態を使用しており、休止状態のロックのためにバージョン列が提供されています。int問題は、バージョン列がJava の制限に達するほど頻繁にアプリがエントリを更新することです。intMySQL の限界に達している可能性もあります。

バージョンが制限 (Java または MySQL) に達したら、バージョンをゼロに戻す方法はありますか?

確かに、データ型を長くすることができます。しかし、それは避けられないことを遅らせているだけです。

編集:グーグルで検索して、この注釈を見つけました:@OptimisticLock(excluded = true)。リンク: http://bit.ly/nczCx1理論的には動作するようですが、うまく使用できていません。この注釈を適切に使用する方法を知っている人はいますか?

4

3 に答える 3

3

さて、整数の限界に達しました。十分に公平です。それを増やすと、「長い」としましょう。さらに 4 バイトを使用できます。これで十分です(それでも、避けられないことを遅らせるだけです)。

再びオーバーフローし始める前に、(2**32 回の更新の) 古い制限に正確に 2**32 回達することができます。それだけの数の更新が行われるのに 1 秒かかると仮定して (もっと時間がかかったと思います)、オーバーフローするのにさらに 2**32 秒 (または約 136 年) かかります。

しかし、別のエレガントなソリューションがあるかどうかはわかりませんが、ない場合は、そのような詳細に時間を無駄にしません.

于 2011-08-21T15:33:11.853 に答える
0

@OptimisticLock(excluded=true) が機能します! 更新されたすべてのプロパティに確実に配置するのを忘れていました。約束どおりにバージョン番号をインクリメントすることはできません。

例:

@Entity
@Table(name="some_table")
public class SomeEntity extends BaseEntity {
    //... some code

    @Column
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
    @OptimisticLock(excluded=true)
    private DateTime lastUsed = new DateTime();

    //... some code
}

このように、lastUsed プロパティが更新 (および永続化) されても、バージョンは増加しません。

于 2011-08-22T22:28:26.230 に答える