gpt4 book ai didi

java - 使用 Hibernate 验证日期

转载 作者:搜寻专家 更新时间:2023-11-01 04:05:31 24 4
gpt4 key购买 nike

我们有一个现有的酒店管理系统。我被要求在系统的“创建住宿”功能中添加日期验证。对话框如下所示:

enter image description here

“结束日期”已经过验证,如下面的代码所示。 Hibernate 中的 @Future 注释确保日期是 future 的日期。

@NotNull
@Future
@DateTimeFormat(pattern = "dd/MM/yyyy")
@Temporal(TemporalType.DATE)
private Date endDate;

编辑

我被要求为“开始日期”添加验证。只允许现在或将来的日期。我尝试使用 @Present 注释,但我想没有这样的东西。不幸的是,@Future 不接受今天的日期。我对这种事情很陌生。所以我希望有人能帮助我。谢谢。

最佳答案

hibernate

你可以使用

@CreationTimestamp
@Temporal(TemporalType.DATE)
@Column(name = "create_date")
private Date startDate;

或更新

@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "modify_date")
private Date startDate;

Java (JPA)

您可以定义一个字段 Date startDate; 并使用

@PrePersist
protected void onCreateStartDate() {
startDate = new Date();

或更新

@PreUpdate
protected void onUpdateStartDate() {
startDate = new Date();

更新和示例

在您更新问题以不将开始日期固定为现在之后,您必须采用不同的方法。您需要编写一个自定义 validator 来检查日期是现在还是将来,例如 here .

因此你可以在PresentOrFuture.java中引入一个新的注解:

@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PresentOrFutureValidator.class)
@Documented
public @interface PresentOrFuture {
String message() default "{PresentOrFuture.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

然后你必须在 PresentOrFutureValidator.java 中定义 validator :

public class PresentOrFutureValidator
implements ConstraintValidator<PresentOrFuture, Date> {

public final void initialize(final PresentOrFuture annotation) {}

public final boolean isValid(final Date value,
final ConstraintValidatorContext context) {

// Only use the date for comparison
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);

Date today = calendar.getTime();

// Your date must be after today or today (== not before today)
return !value.before(today) || value.after(today);

}
}

然后你必须设置:

@NotNull
@PresentOrFuture
@DateTimeFormat(pattern = "dd/MM/yyyy")
@Temporal(TemporalType.DATE)
private Date startDate;

好吧,这已经很详尽了。我自己还没有测试过,因为我现在没有设置可以这样做,但它应该可以工作。希望对您有所帮助。

关于java - 使用 Hibernate 验证日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40482252/

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