Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何在处理AVRO格式时自定义序列化/反序列化日期字段?_Hibernate_Spring Data Jpa_Avro_Hibernate Criteria_Jackson Dataformat Avro - Fatal编程技术网

Hibernate 如何在处理AVRO格式时自定义序列化/反序列化日期字段?

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

在以AVRO格式序列化和反序列化数据时,处理日期字段时,我面临一个非常奇怪的问题

我们有一个JPA实体,定义如下

@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一样