2012-04-13 88 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