具有空值的唯一键

时间:2016-02-24 08:57:28

标签: sql spring postgresql spring-mvc jpa

这是表的架构,这里定义了一个与job_category_id,screening_type_id,test_id,sex的唯一约束。

[InvalidOperationException: Tracker.Current is not initialized]
Sitecore.Analytics.Pipelines.StartAnalytics.StartTracking.Process(PipelineArgs args) +317
(Object , Object[] ) +83
Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) +445
 Project.Web.Handler.PdfCreation.GetProductPdf.ProcessRequest(HttpContext context) in d:\Project\Website\Handler\PdfCreation\GetProductPdf.ashx.cs:69
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +913
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165

如果一个字段为空,则此处的唯一约束失败。

enter image description here

如何添加约束以便接受一个空值,因此它将是唯一的。

可以使用JPA在应用程序中处理这种情况吗?

1 个答案:

答案 0 :(得分:4)

根据documentation

  

空值不等于

因此,独特的约束不会以这种方式工作。 您有两个选择:

  1. 创建一个触发器,如果​​表中包含多个空值,将手动检查数据完整性并拒绝更改。

  2. 在这些列上将默认值设置为final CellProcessor[] processors = new CellProcessor[] { new StrRegEx("\\w{3}"), // string value check new ParseDate("yyyy-MM-dd_HH:mm:ss", new DateToCalendar()) // date }; 0约束。在这种情况下,您将只能有一行包含空(零)值。

  3. 更新:

    根据Abelisto建议,可以使用functional indexes轻松完成。

    NOT NULL