PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara bekerja dengan PGpoint untuk Geolokasi menggunakan PostgreSQL?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memantau PostgreSQL Berjalan Di Dalam Wadah Docker:Bagian Satu

  2. Rails:Kesalahan saat menginstal permata pg

  3. Kembalikan Daftar Zona Waktu yang Didukung oleh PostgreSQL

  4. Setara dengan unpivot() di PostgreSQL

  5. Python/postgres/psycopg2:mendapatkan ID baris yang baru saja dimasukkan