sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLを使用してPGpointforGeolocationを操作するにはどうすればよいですか?

    保存/更新/取得/する方法はありません 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;
        }
    
    }
    

    2番目: エンティティヘッダーの@TypeDefアノテーションを追加し、名前と作成したPGPointTypeを追加し、タイプPGpointのフィールドヘッダーに、作成した名前の@Typeアノテーションを追加する必要があります。

      @TypeDef(name = "type", typeClass = PGPointType.class)
      @Entity
      public class Entity {
    
           @Type(type = "type")
           private PGpoint pgPoint;
    
           // Getters and setters 
    
      }    
    

    よろしくお願いします。




    1. mysql / fuzzy検索のためのレーベンシュタイン距離の実装?

    2. Oracle-更新結合-非キー保存テーブル

    3. 左結合がすべての行を返さない

    4. PostgreSQLにテーブルが存在するかどうかを確認する5つの方法