सहेजने/अपडेट करने/प्राप्त करने/ . का कोई तरीका नहीं है PGpoint ऑब्जेक्ट सीधे, फिर आपको इसे परिवर्तित करने के लिए PGpoint का समर्थन करने के लिए अपना स्वयं का उपयोगकर्ता प्रकार बनाना होगा, इससे पहले कि इसे सहेजा जाए, UserType हाइबरनेट का एक वर्ग है जो डेटाबेस पर सहेजने से पहले इसे परिवर्तित करने के लिए कस्टम प्रकार बनाने की अनुमति देता है। यहां वह कोड है जिसे आपको लागू करने की आवश्यकता है:
पहला: एक ऐसा वर्ग बनाने की आवश्यकता है जो 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
}
सादर।