Hibernate 如何在处理AVRO格式时自定义序列化/反序列化日期字段?
在以AVRO格式序列化和反序列化数据时,处理日期字段时,我面临一个非常奇怪的问题 我们有一个JPA实体,定义如下Hibernate 如何在处理AVRO格式时自定义序列化/反序列化日期字段?,hibernate,spring-data-jpa,avro,hibernate-criteria,jackson-dataformat-avro,Hibernate,Spring Data Jpa,Avro,Hibernate Criteria,Jackson Dataformat Avro,在以AVRO格式序列化和反序列化数据时,处理日期字段时,我面临一个非常奇怪的问题 我们有一个JPA实体,定义如下 @Entity public class Person implements Serializable{ @Column(name = "DOB") @Temporal(TemporalType.DATE) protected Date dob; 我们读取JSON中的有效负载,它可以在持久化数据之前反序列化到上述实体。之后,如果我像这样查询数据库 sel
@Entity
public class Person implements Serializable{
@Column(name = "DOB")
@Temporal(TemporalType.DATE)
protected Date dob;
我们读取JSON中的有效负载,它可以在持久化数据之前反序列化到上述实体。之后,如果我像这样查询数据库
select * from Persons where dob='01-JAN-2019' -- I get records
但是,如果它是AVRO,则通过HTTP将它发送到服务,在那里它被读取并转换为实体并被持久化,而不是JSON,当记录被持久化时,我获得状态。但是,如果我运行相同的SELECT,除非我明确地说
select * from Persons where to_date(dob)='01-JAN-2019'.
但是如果我在我的机器上本地运行相同的代码库,它就像一个符咒一样工作,但是部署到我们的DIT和其他区域的相同代码不起作用
有人面临过类似的问题吗
我添加了一个代理数据源并启用了
net.ttddyy.dsproxy.support.ProxyDataSource
日志在本地和远程运行时完全相同
在JSON的情况下
Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JSONDateDeserializer()).create();
JsonReader reader = new JsonReader(is); //where is InputStreamReader(ServletInputStream)
reader.beginArray();
while(reader.hasNext()){
Person p = gson.fromJson(reader,Person.class);
repository.save(p); //This works fine
..........
JSONDateDeserializer has custom Deserialize logic.
就阿夫罗而言
AvroMapper avroMapper = new AvroMapper();
AvroSchema schema = avroMapper.schemaFor(Person.class);
objectReader = avroMapper.readerFor(Person.class)
.with(schema);
MappingIterator<Person> mi = objectReader.readValues(is); //read from servletInputStream
mi.forEachRemaining(p->repository.save(p)); //Data is saved, but date field is behaving differently
AvroMapper AvroMapper=new AvroMapper();
AvroSchema schema=avroMapper.schemaFor(Person.class);
objectReader=avroMapper.reader(Person.class)
.带有(模式);
MappingIterator mi=objectReader.readValues(is)//从servletInputStream读取
mi.forEachRemaining(p->repository.save(p))//数据已保存,但日期字段的行为不同
我认为,应该有一种注册自定义日期序列化程序和反序列化程序的方法,就像JsonDateDeserializer一样