我尝试创建一个包含一些信息的表,例如id
、date
、staff
和provider
> 执行 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);
}
谢谢!
最佳答案
您不应该对 entity identifier 之外的字段使用
@GenerateValue
注释。 (由@Id
注释进行注释)。您应该使用
<@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/