【发布时间】:2020-09-02 05:39:48
【问题描述】:
我尝试创建一个包含一些信息的表,例如 id、date、staff 和 provider 以执行 CRUD。当我使用 java.util.date 和 @Jsonformat 添加日期时,它不允许我插入重复值。
例如,当我插入日期“25-01-1996”时,我无法再次插入该日期。
它说:“错误:重复键值违反唯一约束详细信息:键(日期)=(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);
}
谢谢!
【问题讨论】:
-
确保在数据库中
date也没有被标记为唯一索引 -
@Vishnu 谢谢!我查看了我的数据库,但似乎没有任何唯一数据
标签: java hibernate spring-mvc mapping java.util.date