Tidak ada cara untuk menyimpan/memperbarui/mendapatkan/ Objek PGpoint secara langsung, Kemudian Anda harus membuat tipe pengguna Anda sendiri untuk mendukung PGpoint untuk mengubahnya, sebelum ini disimpan, UserType adalah kelas Hibernate yang memungkinkan untuk membuat tipe khusus untuk mengubahnya sebelum disimpan di database. Berikut adalah kode yang perlu Anda terapkan:
Pertama: Perlu membuat kelas yang mengimplementasikan 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;
}
}
Kedua: Perlu menambahkan pada header entitas penjelasan @TypeDef, tambahkan nama dan PGPointType yang Anda buat dan pada beberapa bidang header jenis PGpoint, tambahkan penjelasan @Type dengan nama yang Anda buat :
@TypeDef(name = "type", typeClass = PGPointType.class)
@Entity
public class Entity {
@Type(type = "type")
private PGpoint pgPoint;
// Getters and setters
}
Salam hangat.