gpt4 book ai didi

java - Hibernate:如何使用同一个表(或实体)的两列(字段)创建约束

转载 作者:行者123 更新时间:2023-12-04 05:02:39 27 4
gpt4 key购买 nike

我有一个包含两个日期的 hibernate 实体:startfinish .

@Entity
public class MyEntity{

private Date start
private Date finish;
...
@Temporal(TemporalType.DATE)
@Column(name = "start", nullable = false)
public Date getStart() {
return start
}

@Temporal(TemporalType.DATE)
@Column(name = "finish", nullable = false)
public Date getFinish() {
return finish;
}
}

我想引入一个约束,即 start必须在 finish 之前,我可以在 hibernate 实体中进行这种验证/检查以避免在我的表中写入无效数据吗?
如果是,如何?
我的猜测不是,可能我必须写一个触发器..是吗?有什么更好的想法吗?

最佳答案

您可以使用 Hibernate Validator为您的实体添加验证。您需要介绍自己的custom constraint .

或者你可以在你的 DAO 层中手动完成:

public class MyEntityDAO{ 

....

protected void save(MyEntity entity) {
// check dates
// throw some exception in a case of problems
getCurrentSession().saveOrUpdate(entity);
}
}

不利的一面是,如果您保存一些父实体和 MyEntity entity,这将不起作用。将被级联保存。

一个更容易做的解决方案可能是使用 @PrePersist :
@Entity
public class MyEntity{

....

@PrePersist
protected void checkDates() {
// check dates
// throw some runtime exception in a case of problems
}
}

但我不确定在这种情况下 trnsaction 是否会默认回滚。

关于java - Hibernate:如何使用同一个表(或实体)的两列(字段)创建约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15953502/

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