Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

227
Vistas
¿Cómo insertar valores java.util.Date en la columna de tipo de fecha de Cassandra usando Spring Data Cassandra?

Tengo una tabla de Cassandra con una columna de tipo de fecha de la siguiente manera:

 create table people ( id int primary key, name text, email text, dob date );

Estoy usando SpringBoot 1.5.2 + Spring Data Cassandra Starter.

 @Table("people") public class Person { @PrimaryKey Integer id; private String name; private String email; private java.util.Date dob; //setters and getters } public interface PersonRepository extends CrudRepository<Person, Integer>{ }

Estoy insertando una nueva Persona de la siguiente manera:

 personRepository.save(new Person(1, "Siva","siva@gmail.com", new java.util.Date()));

Está arrojando el siguiente error:

 Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Expected 4 byte long for date (8) at com.datastax.driver.core.Responses$Error.asException(Responses.java:136) ~[cassandra-driver-core-3.1.4.jar:na] at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:179) ~[cassandra-driver-core-3.1.4.jar:na] at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:177) ~[cassandra-driver-core-3.1.4.jar:na] at com.datastax.driver.core.RequestHandler.access$2500(RequestHandler.java:46) ~[cassandra-driver-core-3.1.4.jar:na]

Pero si hago que el tipo de columna dob sea una marca de tiempo, entonces funciona bien. ¿Es posible tener una columna de tipo de fecha y usar las propiedades de tipo java.util.Date ?

Ps: Incluso si uso java.sql.Date, obtengo el mismo error.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Utilice com.datastax.driver.core.LocalDate

Puede usar cualquiera de estos métodos para obtener LocalDate de java.util.Date

  • LocalDate.fromYearMonthDay(2017, 03, 28)
  • LocalDate.fromMillisSinceEpoch(nueva fecha().getTime())

O puede crear su propio códec que le permitirá insertar java.util.Date en el tipo de fecha de Cassandra.

Puedes empezar como el siguiente:

 public class DateCodec extends TypeCodec<Date> { private final TypeCodec<LocalDate> innerCodec; public DateCodec(TypeCodec<LocalDate> codec, Class<Date> javaClass) { super(codec.getCqlType(), javaClass); innerCodec = codec; } @Override public ByteBuffer serialize(Date value, ProtocolVersion protocolVersion) throws InvalidTypeException { return innerCodec.serialize(LocalDate.fromMillisSinceEpoch(value.getTime()), protocolVersion); } @Override public Date deserialize(ByteBuffer bytes, ProtocolVersion protocolVersion) throws InvalidTypeException { return new Date(innerCodec.deserialize(bytes, protocolVersion).getMillisSinceEpoch()); } @Override public Date parse(String value) throws InvalidTypeException { return new Date(innerCodec.parse(value).getMillisSinceEpoch()); } @Override public String format(Date value) throws InvalidTypeException { return value.toString(); } }

Al crear la conexión, debe registrarse:

 CodecRegistry codecRegistry = new CodecRegistry(); codecRegistry.register(new DateCodec(TypeCodec.date(), Date.class)); Cluster.builder().withCodecRegistry(codecRegistry).build();

Para más: http://docs.datastax.com/en/developer/java-driver/3.1/manual/custom_codecs/

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda