Trying to filter using date on spring-boot olingo odatav2 service but getting gregorian calendar error

Viewed 455

I'm trying to do a filter request like so

<Service>/odata/InspectionValidations?$filter=DateAssigned gt datetime'2020-07-23T00:00:00'

but I am getting an

java.util.GregorianCalendar cannot be cast to java.util.Date

In fact there is a similar question around a year ago with no answer here so I'm going to post a new one. I'm guessing I need to some sort of conversion? Or did I declare the DateAssigned entity wrong? In this case I used java.util.Date but changing it to java.sql.Date results in the same error, since sql.Date is just a subclass of util.Date.

package gov.doe.app.domain;

import java.util.Date;
//import java.sql.Date;
import java.time.LocalDateTime;
import java.util.GregorianCalendar;
import com.fasterxml.jackson.annotation.JsonFormat;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.persistence.SequenceGenerator;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
@Table(name = "inspection_validation")
public class InspectionValidation {
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, 
    generator = "inspection_validation_id_seq")
    @SequenceGenerator(name = "inspection_validation_id_seq", 
    sequenceName = "seq_inspection_validation", allocationSize = 1)
    @Column(name = "id")
    @NotNull
    private Long id;

    @Column(name = "version")
    @NotNull
    private Long version;

    @Column(name = "is_active")
    @NotNull
    private Boolean isActive;

    //@Column(name = "assigned_by")
    //private Long assignedBy;

    @ManyToOne
    @JoinColumn(name = "assigned_by", referencedColumnName = "id")
    private AdminAccount assignedBy;

    @Column(name = "assigned_remarks")
    private String assignedRemarks;

    @Column(name = "assignment_no")
    @NotNull
    private String assignmentNumber;

    @Column(name = "contact_no")
    private String contactNumber;

    //@Column(name = "current_evaluator")
    //private Long currentEvaluator;

    @ManyToOne
    @JoinColumn(name = "current_evaluator", referencedColumnName = "id")
    private AdminAccount currentEvaluator;

    @Column(name = "date_assigned")
    private Date dateAssigned;

    @Column(name = "evaluation_remarks")
    private String evaluationRemarks;
}

I'm using a ODataJPAServiceFactory to process the Odata part.

2 Answers

The solution would be to define the data in the entity definition using java.sql.Date.

You can also make a decision to use one of the following SQL Datatypes to suit your needs

DATE to save a date without time information

TIME to store a time without a date, and

TIMESTAMP to store date and time information.

I had same problem. Use import java.util.Calendar; instead of import java.util.Date;

Related