例如我有一些实体,如:休眠的UniqueConstraint
@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;
要检查该实体是由场日期我加入(唯一=真)唯一的。这可以正常工作,但前提是不要对实体使用“可关闭”方法。如果你想跟踪这些对象的历史,这是为了这种情况。所以我使用'validThru'字段来指定实体何时有效。
所以我的问题是:是否有可能通过使用任何自定义验证/注释来检查唯一性仅限有效实体(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号):
-----------------------------------------------------------------
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 |
-----------------------------------------------------------------
谢谢
查看这对您是否有任何帮助方案 - http:/ /www.hibernate.org/subprojects/validator.html – Sashi
嗨萨西,这是不可能的验证。我可以谷歌和感兴趣的人谁真的已经解决了这个问题。 –