gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:42:32 27 4
gpt4 key购买 nike

我尝试创建一个包含一些信息的表,例如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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com