Hibernateは業務用アプリとかで出てくる、楽観的ロック機構を標準で備えています。それを試してみました。複数のトランザクションである同じrowを検索してきて、それをそれぞれのトランザクションでupdateしてみようと思います。
対象のテーブルMESSAGESは以下の通り:
mysql> describe test.MESSAGES; +-----------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+------------------+------+-----+---------+----------------+ | MESSAGE_ID | int(10) unsigned | NO | PRI | NULL | auto_increment | | NEXT_MESSAGE_ID | int(10) unsigned | YES | MUL | NULL | | | MESSAGE_TEXT | varchar(255) | NO | | NULL | | | VERSION | int(10) unsigned | NO | | 0 | | +-----------------+------------------+------+-----+---------+----------------+
このテーブルを作成するために実行するDDLは以下の通り:
CREATE TABLE `MESSAGES` ( `MESSAGE_ID` int(10) unsigned NOT NULL auto_increment, `NEXT_MESSAGE_ID` int(10) unsigned default NULL, `MESSAGE_TEXT` varchar(255) character set ujis NOT NULL default '', `VERSION` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`MESSAGE_ID`), KEY `MESSAGES_FKIndex1` (`NEXT_MESSAGE_ID`), CONSTRAINT `MESSAGES_ibfk_1` FOREIGN KEY (`NEXT_MESSAGE_ID`) REFERENCES `MESSAGES` (`MESSAGE_ID`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
この記事は
現在のアクセス:38991