java—由于外键值为空,无法从表中获取数据

hsvhsicv  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(369)

我使用mysql数据表和sql查询来获取数据,我从由一对多和多对一关系连接的两个表中进行选择,但是如果Map的表没有任何值,那么我甚至没有得到我选择的表的值。但当我把外键,然后它的工作很好,我是两个表的数据。

@Query("SELECT LD,REC FROM LayerDetails LD JOIN LD.recipeUser REC")
public List getLayerDetails();

这是我的sql查询,当recipeuser为null时,尽管有layerdetails的值,但我没有得到任何值。

5jdjgkvh

5jdjgkvh1#

这是因为 JOIN 这里是一个内部联接(如果不使用特定联接,这是默认的)。内部连接在 LayerDetails 以及 RecipeUser . 然而,作为一个领域 recipeUsernull 在您的示例中,它没有用于该示例的元组 LayerDetails . 所以也要找到 LayerDetails ,它们没有 recipeUser ,您需要使用 LEFT JOIN 相反。

@Query("SELECT LD,REC FROM LayerDetails LD LEFT JOIN LD.recipeUser REC")
public List getLayerDetails();

如果你想了解更多关于 JOIN jpa的可能性,你可以看看https://www.objectdb.com/java/jpa/query/jpql/from 例如。

kb5ga3dv

kb5ga3dv2#

我提出了同样的问题。我通过 LEFT JOIN 反而很简单 JOIN .
[inner]join-仅返回两个表中匹配的记录
完全联接-返回两个表中的记录。如果没有匹配项,则缺少的边将包含null。
left join—返回左表中的所有记录,右表中有匹配的记录(如果可用)。
右连接-返回右表中的所有记录,左表中有匹配的记录(如果可用)。

您可以查看sql联接的可视化表示,以了解更多详细信息。

相关问题