16 Ocak 2020 Perşembe

JPA @Lob Anotasyonu

Giriş
Şu satırı dahil ederiz.
import javax.persistence.Lob;
Verinin java.sql.Types.BLOB veya java.sql.Types.CLOB olarak kaydedilmesini sağlar. Açıklaması şöyle. Eğer üye alan tipi String veya char ise java.sql.Types.CLOB seçilir, değilse java.sql.Types.BLOB seçilir.
Specifies that a persistent property or field should be persisted as a large object to a database-supported large object type. Portable applications should use the Lob annotation when mapping to a database Lob type. The Lob annotation may be used in conjunction with the Basic annotation or the ElementCollection annotation when the element collection value is of basic type. A Lob may be either a binary or character type.
The Lob type is inferred from the type of the persistent field or property, and except for string and character-based types defaults to Blob.
Açıklaması şöyle. Üye alanın Serializable olması gerekir.
@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 binary 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.
Üye Alan Tipi
Eğer portable kod istiyorsak üye alan String veya byte[] olmalıdır. Böylece herhangi bir JPA sağlayıcısını kullanabiliriz.

Veritabanı Sütun Tipi
Kullandığımız ORM bu tipi gerçek veri tabanı sütun tipine çevirir. Ancak veri tabanları 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 
Not : Hibernate'e Mahsus JPA @Lob Anotasyonu - PostgreSQL yazısına tababilirsiniz.

Örnek - Oracle
Bazen veri tabanı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;
Lazy 
@Lob lazy değildir. Lazy olması için kodda bunu belirtmek gerekir.
Ö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