@Optional annotated on a property Spring

问题描述 投票:0回答:1
     org.jvnet.hk2.annotations.Optional;
     ...         

     @Entity
     public class Contact {
        
        @NotBlank
        private String contactUserId;
    
        @Optional // Will it work? 
        private Boolean main = Boolean.FALSE;

我有一个从数据库接收数据的联系人类,但是一种联系人可能会收到 Boolean main 而另一种可能不会。注释是否正确?我找不到任何好的解释,不确定 id 实际上是一个正确的注释。

spring annotations
1个回答
0
投票

您在代码中使用的 @Optional 注释不是标准的 Java 注释,而是来自 org.jvnet.hk2.annotations 包,它是 HK2 框架的一部分。

HK2中@Optional注解的目的是表明依赖注入目标字段或参数是可选的,这意味着如果容器找不到合适的绑定,它不应该抛出异常。

但是,在您的代码片段中,您似乎正在尝试使用 @Optional 在持久性上下文(即数据库存储)中将主字段标记为可选。这不是实现此目标的正确方法。相反,您应该使用 @Column(nullable = true) 注释在数据库模式中将主字段标记为可为空。这将允许该字段在数据中未提供时在数据库中具有 NULL 值。

这是一个示例,说明如何注释主字段以使其可为空:

@Entity
public class Contact {

   @NotBlank
   private String contactUserId;

   @Column(nullable = true)
   private Boolean main = Boolean.FALSE;
   // ...
}

有了这个注解,当一个Contact实例持久化到数据库时,如果数据中没有提供main字段,它的值将是NULL。

© www.soinside.com 2019 - 2024. All rights reserved.