Giriş
Optimistic lock için kullanılır.
Açıklaması şöyle.
Açıklaması şöyle. Version alanı genellikle long yapılır.
Şöyle yaparız
Bir kayıt bir sorgu ve bir güncelleme içeren sql şöyledir.
Eğer arzu edilirse sütun ismi, açıklaması gibi şeyler de verilebilir. Hatta sütun ismi verilmesi mantıklı bile olabilir çünkü version kelimesi optlock yerine satırın kendi bilgisi gibi de anlaşılabilir.
Şöyle yaparız.
Optimistic lock için kullanılır.
OptimisticLockException FırlatılırJPA uses a version field in your entities to detect concurrent modifications to the same datastore record. When the JPA runtime detects an attempt to concurrently modify the same record, it throws an exception to the transaction attempting to commit last.
Açıklaması şöyle.
If the value has changed in the meantime an OptimisticLockException will be thrown and transaction will be rolled back. Otherwise, the transaction commits the update and increments the value of version property.Bu Alan Bir Sayıdır
Açıklaması şöyle. Version alanı genellikle long yapılır.
This property can be a numeric (int, long, short) or java.sql.Timestamp field. Only one property with @Version annotation can exist per entity.Örnek
Şöyle yaparız
@Entity
public class MyEntity implements Serializable {
@Id
@GeneratedValue
private Long id;
private String name;
@Version
private long version;
//...
}
Üretilen sql'de update cümlesi version bilgisini de içerir.UPDATE MYENTITY SET ..., VERSION = VERSION + 1 WHERE ((ID = ?) AND (VERSION = ?))
ÖrnekBir kayıt bir sorgu ve bir güncelleme içeren sql şöyledir.
Örnekinsert into CART1 (name, total, version) values (?, ?, ?)select cart2x0_.cart_id as cart_id1_1_0_, cart2x0_.name as name2_1_0_, cart2x0_.total as total3_1_0_, cart2x0_.version as version4_1_0_ from CART1 cart2x0_ where cart2x0_.cart_id=?update CART1 set name=?, total=?, version=? where cart_id=? and version=?
Eğer arzu edilirse sütun ismi, açıklaması gibi şeyler de verilebilir. Hatta sütun ismi verilmesi mantıklı bile olabilir çünkü version kelimesi optlock yerine satırın kendi bilgisi gibi de anlaşılabilir.
@Version
@Column(name = "optlock", columnDefinition = "integer DEFAULT 0",nullable = false)
private long version = 0L;
Örnek
Şöyle yaparız.
<E extends BaseEntity> E find(E clientEntity) {
E entity = entityManager.find(clientEntity.getClass(), clientEntity.getId());
if (entity.getVersion() != clientEntity.getVersion()) {
throw new ObjectOptimisticLockingFailureException(...);
}
return entity;
}
Hiç yorum yok:
Yorum Gönder