Hibernate 映射 PostgresSQL中的数组类型

来源:互联网 发布:如何看待吴敦义 知乎 编辑:程序博客网 时间:2024/06/05 21:57

参考及引用自 https://vladmihalcea.com/2017/06/21/how-to-map-java-and-sql-arrays-with-jpa-and-hibernate/

  1. 添加 maven 依赖:

    <dependency>    <groupId>com.vladmihalcea</groupId>    <artifactId>hibernate-types-52</artifactId>    <version>1.1.1</version></dependency>
  2. 新增 BaseEntity 类充当所有实体类的基类。

    import com.vladmihalcea.hibernate.type.array.IntArrayType;
    import com.vladmihalcea.hibernate.type.array.StringArrayType;
    import org.hibernate.annotations.DynamicInsert;
    import org.hibernate.annotations.DynamicUpdate;
    import org.hibernate.annotations.TypeDef;
    import org.hibernate.annotations.TypeDefs;

    import javax.persistence.MappedSuperclass;

    /**

    • 基础实体类
      *
    • @author yanfa.Chen
    • @date 2017/11/29
      */
      @TypeDefs({
      @TypeDef(
      name = “string-array”,
      typeClass = StringArrayType.class
      ),
      @TypeDef(
      name = “int-array”,
      typeClass = IntArrayType.class
      )
      })
      @MappedSuperclass
      @DynamicInsert()
      @DynamicUpdate()
      public class BaseEntity {}

    BaseEntity 类中通过hibernate自定义类型,我们使用hibernate-types-52库自定义了两种类型:string-arrayint-array。有兴趣的可去查看他的源码。

    1. 实体类 Taction 继承 BaseEntity

    import org.hibernate.annotations.Type;

    import javax.persistence.*;
    import java.io.Serializable;
    import java.util.Date;

    /**

    • 事务行动实体
      *
    • @author yanfa.Chen
    • @date 2017/11/21
      */
      @Entity
      @Table(name = “taction”, schema = “public”)
      public class Taction extends BaseEntity implements Serializable {

      private static final long serialVersionUID = 3617161749276324581L;
      private Integer fid;
      private String ftitle;
      private String fcontent;
      private String[] ftaglist; // 对应数据库中 text[]
      private Integer[] fclientidlistRef; // 对应数据库中 int[]
      …..

然后在实体类字段上或 get方法上添加:

@Type(type = "int-array")@Column(name = "fclientidlistRef")public Integer[] getFclientidlistRef(){    return fclientidlistRef;    }    

OK,现在就可以将数据库中的int[]text[]直接映射到实体类中的相应类型的数组中。如 int[] => Integer[] 或 int[], text[] => String[]

原创粉丝点击