我有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中创建一个新类型?