私は、ハイバーネイトに並行処理をさせようとしています。そして、いくつかの研究の後に@Versionの使い方が出てきました。私のアプリケーションは、MY_TABLEに新しい行を挿入しようとすると@Versionは@DynamicInsertで動作しません
CREATE TABLE MY_TABLE (
ID NUMBER NOT NULL
, VERSION NUMBER NOT NULL
);
ALTER TABLE MY_TABLE ADD CONSTRAINT PK_MY_TABLE KEY (ID);
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Version;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.Generated;
import org.hibernate.annotations.GenerationTime;
@Entity
@Table(name = "MY_TABLE")
@SequenceGenerator(name = "SQ_NAME", sequenceName = "SQ_MY_TABLE", initialValue = 1, allocationSize = 1)
@DynamicUpdate
@DynamicInsert
public class MyTable implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQ_NAME")
private Long id;
@Column(name = "VERSION", insertable = false, updatable = false)
@Version
@Generated(GenerationTime.ALWAYS)
private Long version;
... getters and setters
}
を、Oracleは
ORA-01400: cannot insert NULL into ("MY_TABLE"."VERSION")
は、私が何をしないのです例外をスロー:以下 は、私がこれまでやっているものの例を次の? @DynamicInsertを削除した場合にのみ動作します...
PS:私はそれを使用しないと、最初に再クエリーせずに2つの更新を同じレコードで実行できないため、私は@ Generated(GenerationTime.ALWAYS)を使用しています。
環境:JBoss EAP 6.3、java 1.7.0_79、hibernate 4.3.11.Final(JTAを使用)、JSF 2.0、およびOracle 12c。