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/6/haskell/10.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
Database JPA-左连接2个不关联的表_Database_Jpa_Join_Entity - Fatal编程技术网

Database JPA-左连接2个不关联的表

Database JPA-左连接2个不关联的表,database,jpa,join,entity,Database,Jpa,Join,Entity,我有两个没有关联的表/实体。 我可以在JPA中选择交叉连接 FROM A as a, B as b WHERE b.col1=a.col1 如何执行左连接? 我想要A中的所有值,在可能的情况下用B值填充它们,在没有B的情况下保留NULL 不起作用: 预期加入的路径 无效路径:“b.col1” 您不能在JPA中这样做,只要实体之间没有关系 解决方案: 使用本机查询 在它们之间添加一个关系(最终是间接的惰性关系)。对于间接,我的意思是: 一个伪实体, 伪实体知道B(但关系所有者是实体B), B知道

我有两个没有关联的表/实体。 我可以在JPA中选择交叉连接

FROM A as a, B as b WHERE b.col1=a.col1
如何执行左连接?

我想要A中的所有值,在可能的情况下用B值填充它们,在没有B的情况下保留NULL

不起作用:

预期加入的路径

无效路径:“b.col1”


您不能在JPA中这样做,只要实体之间没有关系

解决方案:

  • 使用本机查询
  • 在它们之间添加一个关系(最终是间接的惰性关系)。对于间接,我的意思是: 一个伪实体, 伪实体知道B(但关系所有者是实体B), B知道伪实体

  • 这在JPA中是可能的,具有以下查询:

    FROM A as a, B as b WHERE b.col1=a.col1 OR b.col1 IS NULL
    

    关于Dimitri Dewale的回答,这个查询是笛卡尔连接。笛卡尔连接或交叉连接返回来自两个或多个连接表的记录集的笛卡尔乘积。因此,它相当于一个内部联接,其中联接条件的计算结果始终为True或语句中缺少联接条件。如果您想了解更多信息,请点击以下链接:

    这与左连接不同。假设有b.col1=3,没有a.col1=3。您的查询不会返回此行,但左联接将返回该行。本文介绍如何使用最新的Hibernate版本执行此操作:
    FROM A as a, B as b WHERE b.col1=a.col1 OR b.col1 IS NULL