例如,我有一些实体,例如:
@Entity
public class WorkingScheduleOverride implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Version
private Integer version;
@Column
private Date validFrom;
@Column
private Date validThru;
@Column
private Date timestamp;
@Column(unique = true)
private Date date;
要检查实体是否按我添加的字段日期是唯一的(unique = true)。这很好用,但前提是不对实体使用“可关闭”方法。如果您想跟踪这些对象的历史记录,则适用于这种情况。所以我使用“validThru”字段来指定实体有效的时间。
所以我的问题是:是否可以通过使用任何自定义验证/注释来检查唯一性ONLY VALID entity (validThru == null || validThru < new Date())
。
数据库中的数据不正确(两条记录具有相同的日期且均有效):
-----------------------------------------------------------------
id |version |timestamp |valid_from |valid_thru |date |
-----------------------------------------------------------------
1 |1 |2012-01-01 |2012-01-01 |null |2013-01-01 |
-----------------------------------------------------------------
2 |1 |2012-01-01 |2012-01-01 |null |2013-01-01 |
-----------------------------------------------------------------
数据库中的正确数据(两条记录具有相同的日期,但第二条记录无效):
-----------------------------------------------------------------
id |version |timestamp |valid_from |valid_thru |date |
-----------------------------------------------------------------
1 |1 |2012-01-01 |2012-01-01 |null |2013-01-01 |
-----------------------------------------------------------------
2 |1 |2012-01-01 |2012-01-01 |2012-06-01 |2013-01-01 |
-----------------------------------------------------------------
数据库中的数据不正确(两条记录的日期相同且均有效,第二条记录仅在 2014 年 1 月 1 日失效):
-----------------------------------------------------------------
id |version |timestamp |valid_from |valid_thru |date |
-----------------------------------------------------------------
1 |1 |2012-01-01 |2012-01-01 |null |2013-01-01 |
-----------------------------------------------------------------
2 |1 |2012-01-01 |2012-01-01 |2014-01-01 |2013-01-01 |
-----------------------------------------------------------------
谢谢