ホームページ  >  記事  >  Java  >  Hibernate を使用して PostgreSQL 配列を Java 配列にマップする方法: 数値配列マッピングのガイド

Hibernate を使用して PostgreSQL 配列を Java 配列にマップする方法: 数値配列マッピングのガイド

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 09:16:28225ブラウズ

How to Map PostgreSQL Arrays to Java Arrays with Hibernate: A Guide to Numeric Array Mapping

Hibernate を使用した PostgreSQL 配列のマッピング

概要

Hibernate を介して PostgreSQL 配列を Java 配列にマッピングするのは難しい場合があります。この記事では、特に数値配列をマップしようとするときに直面する一般的な問題について説明します。

依存関係の構成

次の Hibernate Types Maven 依存関係の設定が重要です:

<code class="xml"><dependency>
    <groupId>com.vladmihalcea</groupId>
    <artifactId>hibernate-types-52</artifactId>
    <version>${hibernate-types.version}</version>
</dependency></code>

カスタム型定義

PostgreSQL 配列をマップするには、次のようなカスタム型定義が必要です。

<code class="java">@TypeDefs({
    @TypeDef(
        name = "string-array", 
        typeClass = StringArrayType.class
    ),
    @TypeDef(
        name = "int-array", 
        typeClass = IntArrayType.class
    )
})</code>

StringArrayType クラスと IntArrayType クラスは、Hibernate Types プロジェクトによって提供されます。

マッピングの例

SQL スキーマの例に従います:

<code class="sql">CREATE TABLE sal_emp (name text, pay_by_quarter integer[]);</code>

対応する Java クラスは次のようになります:

<code class="java">@Entity(name = "SalEmp")
@Table(name = "sal_emp")
public class SalEmp implements Serializable {

    private String name;

    @Type(type = "int-array")
    @Column(name = "pay_by_quarter")
    private Integer[] payByQuarter;

    // Getters and setters omitted for brevity
}</code>

エンティティの挿入

次のようなエンティティを挿入すると、

<code class="java">SalEmp nullEmp = new SalEmp();
nullEmp.setName("Null Emp");
entityManager.persist(nullEmp);

SalEmp salEmp = new SalEmp();
salEmp.setName("Regular Emp");
salEmp.setPayByQuarter(new Integer[] {1, 2, 3});
entityManager.persist(salEmp);</code>

Hibernate は配列挿入用の適切な SQL ステートメントを生成します。

以上がHibernate を使用して PostgreSQL 配列を Java 配列にマップする方法: 数値配列マッピングのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。