Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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/0/jpa/2.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/2/batch-file/5.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 JPA在加载带有非存在子实体的实体时会出现异常行为_Java_Jpa_Foreign Keys_Entity - Fatal编程技术网

Java JPA在加载带有非存在子实体的实体时会出现异常行为

Java JPA在加载带有非存在子实体的实体时会出现异常行为,java,jpa,foreign-keys,entity,Java,Jpa,Foreign Keys,Entity,加载如下实体时,正确的JPA行为是什么: puiblic class Employee { @ManyToOne @JoinColumns("ID_COMPANY") private Company company; ... } 当我尝试加载一名员工时,引用的公司实体不存在 我是说, 在我的应用程序中,公司实体在这种情况下为空,这是预期行为还是应该引发EntityNotFound异常?因为您没有指定@ManyTone(可选=false)或@JoinColumn(

加载如下实体时,正确的JPA行为是什么:

puiblic class Employee  
{
  @ManyToOne  
  @JoinColumns("ID_COMPANY")  
  private Company company;
  ...
}  
当我尝试加载一名员工时,引用的公司实体不存在

我是说,

在我的应用程序中,公司实体在这种情况下为空,这是预期行为还是应该引发EntityNotFound异常?

因为您没有指定@ManyTone(可选=false)或@JoinColumn(可空=false),员工可以在没有公司的情况下生存,因此,当您加载Employee时,company字段仅为null

如果没有分配给公司的员工就无法生存,则应使用上面的两个注释属性强制执行@JoinColumn(nullable=false)仅在从JPA元数据创建表时使用,可选的=false是对JPA的一个打击,它实际上可以在与数据库对话之前在验证期间引发异常


在定义数据模型时,您应该始终尽可能严格,任何逻辑上不存在的数据模型都应该具有nullable=false(对于基本列也是如此),以便在数据库级别强制执行NOTNULL。让代码因约束冲突异常而失败比在加载数据调用某个方法后发现NullPointerException要好得多。

因为您没有指定@ManyToOne(可选=false)或@JoinColumn(可空=false),员工可以在没有公司的情况下生存,因此,当您加载Employee时,company字段仅为null

如果没有分配给公司的员工就无法生存,则应使用上面的两个注释属性强制执行@JoinColumn(nullable=false)仅在从JPA元数据创建表时使用,可选的=false是对JPA的一个打击,它实际上可以在与数据库对话之前在验证期间引发异常


在定义数据模型时,您应该始终尽可能严格,任何逻辑上不存在的数据模型都应该具有nullable=false(对于基本列也是如此),以便在数据库级别强制执行NOTNULL。让您的代码因约束冲突异常而失败比在加载数据后发现NullPointerException调用某个方法要好得多。

感谢您的回答和您的时间,再想想:ID_COMPANY不是null,但它只是指一个不存在的公司,您的回答在这种情况下正确吗?另外,在这种情况下,JPA什么时候会抛出EntityNotFouldeException?谢谢你的回答和时间,再想想:ID_COMPANY不是空的,但它只是指一家不存在的公司,你的回答在这种情况下正确吗?在这种情况下,JPA何时抛出EntityNotFouldeException?