1概要

LOBまたはラージオブジェクトは、ラージオブジェクトを格納するための可変長データ型を参照します。

データ型には2つのバリアントがあります。

  • CLOB –

    Character Large Object

    は大きなテキストデータを格納します

  • BLOB –

    Binary Large Object

    は、imageのようなバイナリデータを格納するためのものです。

オーディオ、またはビデオ

このチュートリアルでは、ラージオブジェクトを永続化するためにHibernate ORMを利用する方法を説明します。

** 2セットアップ

**

たとえば、Hibernate 5とH2 Databaseを使用します。したがって、それらを__pom.xmlで依存関係として宣言する必要があります。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.2.12.Final</version>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.196</version>
</dependency>

依存関係の最新版はhttps://search.maven.org/classic/#search%7Cga%7C1%7C(g%3A%22com.h2database%22%20OR%20g%3A%22org.hibernate%22にあります。 )%20AND%20(a%3A%22h2%22%20OR%20a%3A%22ヒバネート – コア%22)[Maven Central Repositories]。

Hibernateの設定のより詳細な見方については、私たちのリンクの1つを参照してください:/persistence-with-spring-series/[導入]記事。

** 3 LOBデータモデル

**

私たちのモデル

“ User”

は、プロパティとしてid、name、そしてphotoを持っています。

User

の写真プロパティに画像を保存し、それをBLOBにマッピングします。

@Entity
@Table(name="user")
public class User {

    @Id
    private String id;

    @Column(name = "name", columnDefinition="VARCHAR(128)")
    private String name;

    @Lob
    @Column(name = "photo", columnDefinition="BLOB")
    private byte[]photo;

   //...
}


@ Lob

アノテーションは、データベースが

Large Object

としてプロパティを格納することを指定します。

@ Column

アノテーションの

columnDefinition

は、プロパティの列型を定義します。

ここでは

byte array

を節約するので、__BLOBを使用しています。


4使用法

4.1. 休止状態セッションを開始する

session = HibernateSessionUtil
  .getSessionFactory("hibernate.properties")
  .openSession();

ヘルパークラスを使用して、

hibernate.properties

ファイルに提供されているデータベース情報を使用して

Hibernate Session

を構築します。

4.2. ユーザーインスタンスの作成

ユーザーが写真を画像ファイルとしてアップロードしたとします。

User user = new User();

InputStream inputStream = this.getClass()
  .getClassLoader()
  .getResourceAsStream("profile.png");

if(inputStream == null) {
    fail("Unable to get resources");
}
user.setId("1");
user.setName("User");
user.setPhoto(IOUtils.toByteArray(inputStream));



Apache Commons IO


ライブラリの助けを借りて画像ファイルをバイト配列に変換し、最後に新しく作成した

User

オブジェクトの一部としてバイト配列を割り当てます。

4.3. ラージオブジェクトの永続化


Session

を使用して

User

を格納することで、

Hibernate

はオブジェクトをデータベースレコードに変換します。

session.persist(user);


User

クラスで宣言された

@​​ Lob

アノテーションのため、

Hibernate



“photo”

プロパティを

BLOB

データ型として格納する必要があると理解しています。

4.4. データ検証

データベースからデータを取得し、

Hibernate

を使用してそれを

Java

オブジェクトにマップし直し、挿入されたデータと比較します。

挿入された

ユーザー

のIDを知っているので、データベースからデータを取得するためにそれを使用します。

User result = session.find(User.class, "1");

クエリの結果を入力の

User

のデータと比較しましょう。

assertNotNull(
  "Query result is null",
  result);

assertEquals(
  "User's name is invalid",
  user.getName(), result.getName() );

assertTrue(
  "User's photo is corrupted",
  Arrays.equals(user.getPhoto(), result.getPhoto()) );


Hibernate

は、注釈に関する同じマッピング情報を使用して、データベース内のデータを

Java

オブジェクトにマッピングします。

したがって、取得された

User

オブジェクトは挿入されたデータと同じ情報を持ちます。


5結論


LOB

は、ラージオブジェクトデータを格納するためのデータ型です。

LOB

には、

BLOB



CLOB

という2種類があります。

BLOB

はバイナリデータを格納するためのものであり、

CLOB

はテキストデータを格納するためのものです。


Hibernate

を使用して、正しいデータモデルとデータベース内の適切なテーブル構造を定義している限り、

Java

オブジェクトとの間でデータを簡単にマッピングできることを示しました。

いつものようにこの記事のコードは利用可能です

https://github.com/eugenp/tutorials/tree/master/persistence-modules/hibernate5

[over
GitHubで。