Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @ManyToOne(可选=false)与@Column(可空=false)之间的区别是什么_Java_Hibernate_Orm_Jpa - Fatal编程技术网

Java @ManyToOne(可选=false)与@Column(可空=false)之间的区别是什么

Java @ManyToOne(可选=false)与@Column(可空=false)之间的区别是什么,java,hibernate,orm,jpa,Java,Hibernate,Orm,Jpa,在JPA中,我不知道何时使用属性optional=false和注释@列(nullable=false)。区别是什么?@Column(nullable=false)是用于生成架构的指令。从类生成的数据库列将在实际数据库中标记为不可为null optional=false是一条运行时指令。它所做的主要功能与延迟加载有关。除非记得设置optional=false,否则不能延迟加载非集合映射的实体(因为Hibernate不知道那里应该有代理还是null,除非您告诉它null是不可能的,所以它可以生成代理

在JPA中,我不知道何时使用属性
optional=false
和注释
@列(nullable=false)
。区别是什么?

@Column(nullable=false)
是用于生成架构的指令。从类生成的数据库列将在实际数据库中标记为不可为null


optional=false
是一条运行时指令。它所做的主要功能与延迟加载有关。除非记得设置optional=false,否则不能延迟加载非集合映射的实体(因为Hibernate不知道那里应该有代理还是null,除非您告诉它null是不可能的,所以它可以生成代理。)

这两种方法都用于防止null值,但是如果您介意在

数据库层(您希望使用JPA生成模式)-->使用
@Column(nullable=false)

运行时(在联系数据库之前)-->使用
optional=false
(比第一次检查快得多)


如果您想要两种功能,请同时使用它们。

可能的重复-我认为关于@Basic(optional=false)的讨论也适用于@ManyToOne(optional=false)。另一个有趣的事实是,大多数持久性提供程序使用“optional”参数提供的信息在运行时优化查询。例如,在加载实体时。因此,使用optional=false指定的实际实体的所有关系在加载时都会导致其各自关系的内部联接,而使用optional=true指定的关系则会导致左侧联接。运行时事实已经由Affe解决:“optional=false是一条运行时指令。”