Hibernate和(postgresql)CREATE TYPE

时间:2017-03-21 13:49:45

标签: postgresql hibernate entity

我有pojo类型:

public class DemoPojo implements Serializable {

    private String demoPojo;

    public DemoPojo() {
        super();
        demoPojo = null;
    }

    public DemoPojo(final String demoPojo) throws InvalidDemoPojoException {
        this();
        setDemoPojo(demoPojo);
    }

    public String getDemoPojo() {
        return demoPojo;
    }

    public void setDemoPojo(final String demoPojo) throws InvalidDemoPojoException {
        if (!validateDemoPojo(demoPojo)) {
            throw new InvalidDemoPojoException("Invalid demo POJO [" + demoPojo + "]");
        }
        this.demoPojo = demoPojo;
    } 

...

具有此类型的实体:

@Entity
public class DemoEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long demoPojoId;

    @Column
    private DemoPojo demoPojo;

...

要通过hibernate映射类型,我有:

public class DemoPojoType implements UserType {

    private static final int[] SQL_TYPES = { Types.JAVA_OBJECT };

    @Override
    public int[] sqlTypes() {
        return SQL_TYPES;
    }

    @Override
    public Class<DemoPojo> returnedClass() {
        return DemoPojo.class;
    }

...

和package-info.java

@org.hibernate.annotations.TypeDef(
    name = "DemoPojoType",
    defaultForType = DemoPojo.class,
    typeClass = DemoPojoType.class)

package demo.types;

另外在persistence.xml中是line:

<property name="hibernate.dialect" value="demo.dialect.PostgreSQLDemoDialect"/>

使用方言文件:

public class PostgreSQLDemoDialect extends PostgreSQL94Dialect {
    public PostgreSQLDemoDialect() {

        this.registerColumnType(Types.JAVA_OBJECT, "character varying");

    }
}

除了一个例外,一切正常。这是数据库中的一个表(来自pgAdmin)

CREATE TABLE dp.demopojo
(
    demopojoid bigserial NOT NULL,
    demopojo character varying,
    CONSTRAINT demopojo_pkey PRIMARY KEY (demopojoid)
)

demopojo列是“字符变化”类型。所以它是用PostgreSQLDemoDialect编写的。我想创建一个我自己的类型“demopojo”列,它将来自不同的角色。我已经使用了很长时间了,我唯一可以实现的是“bytea”类型而不是“字符变化”(更糟糕的是,因为难以辨认)。所有其他尝试都会导致错误有些东西不见了,但我找不到。

我应该添加什么来在postgresql中创建一个新类型?

0 个答案:

没有答案