Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

233
Views
¿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.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

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/

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!