26 Mart 2018 Pazartesi

JPA @Lob Anotasyonu

Giriş
Verinin BLOB olarak kaydedilmesini sağlar. Açıklaması şöyle.
@javax.persistence.Lob signifies that the annotated field should be represented as BLOB (binary data) in the DataBase.

You can annotate any serializable data type with this annotation. In JPA, upon persisting (retrieval) the field content will be serialized (deserialized) using standard Java serialization.

Common use of LOB is to annotate a HashMap field inside your Entity to store some of the object properties which are not mapped into DB columns. That way all the unmapped values can be stored in the DB in one column in their binarry representation. Of course the price that is paid is that, as they are stored in binary format, they are not searchable using the JPQL/SQL.
Kullandığımız ORM bu tipi gerçek veritabanı sütun tipine çevirir. Ancak veritabanları arasında da farklılıklar var. Örneğin PostgreSQL oid sütun tipini kullanırken, Oracle kendi blob tipini kullanıyor.
annotation                   postgres     oracle
-------------------------------------------------
byte[] + @Lob                oid          blob 

JPA @Lob Anotasyonu - PostgreSQL yazısına tababilirsiniz.

Örnek
Bazen veritabanında kullanılacak sütun tipini özellikle belirtmek gerekir. Şöyle yaparız. CLOB ve BLOB Oracle sütun tipleridir.
@Lob
@Column(name = "CHARS", columnDefinition = "CLOB")
private String chars;`

@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "DATA", columnDefinition = "BLOB", nullable = false)
private byte[] data;
Örnek
Şöyle yaparız.
@Basic(fetch = FetchType.LAZY) 
@Lob
private String projectDescription = "";
Örnek
Şöyle yaparız.
@Basic(fetch = FetchType.LAZY)
@Lob
@Column(length=5000)
private byte[]  projectDescription1 =new byte[0];

Hiç yorum yok:

Yorum Gönder