sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan arbejder man med PGpoint for Geolocation ved hjælp af PostgreSQL?

Der er ingen måde at gemme/opdatere/hente/ PGpoint objekt direkte,Så skal du oprette din egen brugertype for at understøtte PGpoint for at konvertere det, før dette gemmes, UserType er en klasse af Hibernate, som gør det muligt at oprette brugerdefineret type for at konvertere den før til at gemme på databasen. Her er kode, som du skal implementere:

Først: Behov for at oprette en klasse, der implementerer 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;
    }

}

For det andet: Du skal tilføje entitetsoverskrift @TypeDef-annotering, tilføje et navn og den PGPointType, du har oprettet den, og på en feltoverskrift af typen PGpoint, tilføje @Type-annotering med det navn, du oprettede den :

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

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

       // Getters and setters 

  }    

Venlig hilsen.




  1. MySQL Workbench Alternatives - ClusterControl Configuration Management

  2. Hvordan løser man almindelige problemer med MySQL-databasen?

  3. Sammenligning af DBaaS-failoverløsninger med manuelle gendannelsesindstillinger

  4. Groovy SQL Oracle Array Funktion/Procedure Out Parameter Registrering