配列タイプ

@DbArrayを使用して、文字列、UUID、整数、またはロングのSetまたはリストをマッピングできます。

@Entity
public class Customer {

  @Id
  private long id;

  private String name;

  @DbArray
  private Set<String> tags = new LinkedHashSet<>();

  // getters and setters
}
  
@Entity
class Customer(name: String) {

  @Id
  var id: Long = 0

  var name: String = name

  @DbArray
  var tags = emptyMutableSet<>();

}
  

配列タイプのDDL

上記の例では、tagsプロパティはvarchar[]にマッピングされます。

create table customer (
  id                            bigserial not null,
  name                          varchar(255) not null,
  registered                    date,
  tags                          varchar[],
  version                       bigint not null,
  when_created                  timestamptz not null,
  when_modified                 timestamptz not null,
  constraint pk_customer primary key (id)
);

配列に式が含まれる場合

一般的にcontains式を使用します。

final List<Customer> customers
  = new QCustomer()
  .tags.contains("BLUE")
  .findList();
val customers
  = QCustomer()
  .tags.contains("BLUE")
  .findList()

上記のクエリに対するSQLは次のようになります。

select t0.id, t0.name, t0.registered, t0.tags, t0.version, t0.when_created, t0.when_modified
  from customer t0
 where t0.tags @> array[?]; --bind(BLUE)