PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để làm việc với PGpoint cho Định vị địa lý bằng PostgreSQL?

Không có cách nào để lưu / cập nhật / lấy / Đối tượng PGpoint trực tiếp, Sau đó, bạn phải tạo kiểu người dùng của riêng mình để hỗ trợ PGpoint để chuyển đổi nó, trước khi nó được lưu, UserType là một lớp Hibernate cho phép tạo kiểu tùy chỉnh để chuyển đổi trước đó để lưu trên cơ sở dữ liệu. Đây là mã mà bạn cần triển khai:

Đầu tiên: Cần tạo một lớp triển khai 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;
    }

}

Thứ hai: Cần thêm chú thích @TypeDef trên tiêu đề thực thể, thêm tên và PGPointType mà bạn đã tạo nó và trên một số tiêu đề trường thuộc loại PGpoint, hãy thêm chú thích @Type với tên mà bạn đã tạo nó :

  @TypeDef(name = "type", typeClass = PGPointType.class)
  @Entity
  public class Entity {

       @Type(type = "type")
       private PGpoint pgPoint;

       // Getters and setters 

  }    

Trân trọng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PG ::Lỗi trong mệnh đề GROUP BY

  2. Thay đổi các cột PostgreSQL được sử dụng trong các dạng xem

  3. Làm thế nào để làm tròn đến X phút gần nhất với PL / pgSQL?

  4. lưu đối tượng python trong bảng postgres với dưa chua

  5. Cách giao dịch_timestamp () hoạt động trong PostgreSQL