Няма начин да запазите/актуализирате/получите/ PGpoint обект директно, След това трябва да създадете свой собствен потребителски тип за поддръжка на PGpoint, за да го конвертирате, преди това да бъде запазено, UserType е клас на Hibernate, който позволява да се създаде персонализиран тип, за да се конвертира, преди да се запази в базата данни. Ето код, който трябва да внедрите:
Първо: Необходимо е да създадете клас, който прилага UserType :
public class PGPointType implements UserType {
@Override
public int[] sqlTypes() {
return new int[]
{
Types.VARCHAR
};
}
@SuppressWarnings("rawtypes")
@Override
public Class<PGpoint> returnedClass() {
return PGpoint.class;
}
@Override
public boolean equals(Object obj, Object obj1) {
return ObjectUtils.equals(obj, obj1);
}
@Override
public int hashCode(Object obj) {
return obj.hashCode();
}
@Override
public Object nullSafeGet(ResultSet resultSet, String[] names, SharedSessionContractImplementor sharedSessionContractImplementor, Object o) throws SQLException {
if (names.length == 1) {
if (resultSet.wasNull() || resultSet.getObject(names[0]) == null) {
return null;
} else {
return new PGpoint(resultSet.getObject(names[0]).toString());
}
}
return null;
}
@Override
public void nullSafeSet(PreparedStatement statement, Object value, int index, SharedSessionContractImplementor sharedSessionContractImplementor) throws SQLException {
if (value == null) {
statement.setNull(index, Types.OTHER);
} else {
statement.setObject(index, value, Types.OTHER);
}
}
@Override
public Object deepCopy(Object obj) {
return obj;
}
@Override
public boolean isMutable() {
return Boolean.FALSE;
}
@Override
public Serializable disassemble(Object obj) {
return (Serializable) obj;
}
@Override
public Object assemble(Serializable serializable, Object obj) {
return serializable;
}
@Override
public Object replace(Object obj, Object obj1, Object obj2) {
return obj;
}
}
Второ: Трябва да добавите към заглавката на обект @TypeDef анотация, да добавите име и PGPointType, който сте го създали, и към заглавка на поле от тип PGpoint, да добавите анотация @Type с името, което сте го създали :
@TypeDef(name = "type", typeClass = PGPointType.class)
@Entity
public class Entity {
@Type(type = "type")
private PGpoint pgPoint;
// Getters and setters
}
С уважение.