java - 问题: Java. util.date在 hibernate 中不允许重复的日期值

标签 java hibernate spring-mvc mapping java.util.date

我尝试创建一个包含一些信息的表,例如iddatestaffprovider > 执行 CRUD。当我使用 java.util.date 和 @Jsonformat 添加日期时,它不允许我插入重复的值。
例如,当我插入日期“25-01-1996”时,我无法再次插入这一天。
它表示:“错误:重复的键值违反了唯一约束详细信息:Key(date)=(2107-01-25 07:00:00) 已存在”。
然后,我尝试了使用 java.util.date 的多种方法,例如自定义序列化器或反序列化器,但它尚未起作用。
这是我的模型:

        @Id
        @Column(name="id")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;

        @Column(name="date", nullable = false, unique = false)
        //@JsonSerialize(using = DateSerializer.class)
        //@JsonDeserialize(using = DateDeserializer.class)
        //@Temporal(TemporalType.DATE)
        @JsonFormat(pattern = "dd-MM-yyyy", shape = JsonFormat.Shape.STRING)
        @GeneratedValue
        private Date date;

        @ManyToOne
        @JoinColumn(name="staff_id")
        private Staff staff;

        @ManyToOne
        @JoinColumn(name="provider_id")
        private Provider provider;

这是序列化器和反序列化器:

    {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");

    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
            throws IOException,
            JsonProcessingException {
                String DateSerializer = dateFormat.format(date);
                jsonGenerator.writeString(DateSerializer);
    }
}
    {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");

    @Override
    public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
            throws IOException, JsonProcessingException {
        if (jsonParser.getCurrentToken().equals(JsonToken.VALUE_STRING)){
            try {
                Date date = dateFormat.parse(jsonParser.getText().toString());
                return date;
            } catch (ParseException e) {

            }
        }
        return null;
    }
}

我尝试过的另一个版本:

    private static final ThreadLocal<SimpleDateFormat> formatter = new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue()
        {
            return new SimpleDateFormat("ddMMyyyy");
        }
    };

    public String formatIt(Date date)
    {
        return formatter.get().format(date);
    }

谢谢!

最佳答案

  1. 您不应该对 entity identifier 之外的字段使用 @GenerateValue 注释。 (由 @Id 注释进行注释)。

  2. 您应该使用 @Temporal 注解和 java.util.Date 来指定 TemporalType

    <

因此,您应该通过以下方式纠正您的模型:

@Id
@Column(name="id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Column(name="date", nullable = false, unique = false)
@Temporal(TemporalType.DATE)
@JsonFormat(pattern = "dd-MM-yyyy", shape = JsonFormat.Shape.STRING)
private Date date;

@ManyToOne
@JoinColumn(name="staff_id")
private Staff staff;

@ManyToOne
@JoinColumn(name="provider_id")
private Provider provider;

关于java - 问题: Java. util.date在 hibernate 中不允许重复的日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61835447/

相关文章:

java - Spring开始, "Application failed to start with classpath"、 "Error starting Tomcat context"等错误

java - Spring MVC测试框架: Why doesn't test dispatcher servlet

java - 如何在spring mvc中的servlet xml文件中导入xml文件

java - 触摸屏L&F

java - 在我的 android 项目上添加数字密码字段时出错

java - 比较嵌套 if 条件和单个 if 条件

java - 如何在 Hibernate 3.6 中正确级联保存主键上的一对一双向关系

java - Https 请求可与curl配合使用,但因HttpsURLConnection而失败

具有级联删除的 Hibernate 多对多关系

java.lang.NoClassDefFoundError : javax/el/PropertyNotFoundException when I send invalid values to controller 错误