2012-04-13 86 views
2

我代表文件,看起来像这样的实体:JPA约束的日期一年

文件 date_creation doc_number doc_origin

文档通常被称为'2012/XY/005',这将是2012年源于XY的第五份文件。 所以编号在创建年份和原始编号必须是唯一的,我需要为其设置一个约束。

使用JPA对此进行建模和映射的最佳方式是什么?

我觉得我的选择是:

选项1:把另一个领域的文档实体日期创作年份,使其独特(年,doc_number,doc_origin)

选项2 :创建一个字段doc_ref并放置一个字符串,如'YEAR/ORIG/NUMBER'并使其唯一(doc_ref)

这两个选项都添加了一个重复年份的字段,但选项1要求我使用date_creation更新字段年和Optio n 2要求我与其余部分一致地更新字段doc_ref,所以我倾向于认为选项1是最好的。

有没有另一种选择,我没有看到? 谢谢!

回答

0

如果数据库允许,可以使用基于函数的唯一索引。在Oracle中的示例:

CREATE UNIQUE INDEX YEAR_ORIGIN_NUMBER_IDX 
on DOCUMENT (TRUNC(DT_CREATION, 'YEAR'), DOC_ORIGIN, DOC_NUMBER) 
+0

是的,但我需要这个在JPA中工作,你知道它是否有可能吗? – elias 2012-04-13 14:46:51

+0

对数据库表应用唯一约束。 JPA与它没有多大关系。您可以使用JPA注释来定义唯一约束,但只有在JPA实现为您创建数据库表(或DDL)时才会使用这些约束。最后,约束存在于数据库中。 – 2012-04-13 14:51:46

+0

根据文档[这里](http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/jpa_overview_mapping_unq.html),JPA运行时也必须执行约束声明并确保语句的顺序以避免唯一的约束违规。 – elias 2012-04-13 16:22:58