Hibernate和(postgresql)创建类型

Hibernate和(postgresql)创建类型,postgresql,hibernate,entity,Postgresql,Hibernate,Entity,我有pojo类型: public class DemoPojo implements Serializable { private String demoPojo; public DemoPojo() { super(); demoPojo = null; } public DemoPojo(final String demoPojo) throws InvalidDemoPojoException { thi

我有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;
    }

...
此外,persistence.xml中还有一行:

<property name="hibernate.dialect" value="demo.dialect.PostgreSQLDemoDialect"/>
除了一个例外,一切正常。这是数据库中的一个表(来自pgAdmin)

demopojo列是“字符变化”类型。所以它是用PostgreSQLDemoDialect写的。我想制作一个我自己类型的专栏“demopojo”,它将从character variable派生。我已经用了很长一段时间了,我唯一能做到的就是“bytea”类型,而不是“字符变化”(更糟糕的是,因为难以辨认)。所有其他尝试都会导致错误。有些东西不见了,但我找不到什么


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

您想在postgresql中创建什么类型?或?基于varchar(字符变化)命名为“dpojo”的类型。我可以预览项目,在postgresql中也引入了自己的类型。此类型位于SQL中的列类型中。但我想不出这是怎么做到的。这个项目是巨大的,有数千个源文件,不同的项目放在不同的包中。此外,这种类型的按名称搜索在不同的上下文中捕获了近2000次。这就是为什么我不能为它建模。我想得到创建表dp.demopojo。。。demopojo dpojo,…)没有错误:类型“dpojo”不存在,但如果它不想做比varchar更好/不同的事情,为什么不只使用varchar呢?为什么你想要一个单独的类型?现在,这只是一种可能性。总之,不是一种可能性,而是一种技能。
<property name="hibernate.dialect" value="demo.dialect.PostgreSQLDemoDialect"/>
public class PostgreSQLDemoDialect extends PostgreSQL94Dialect {
    public PostgreSQLDemoDialect() {

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

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