我使用mysql数据表和sql查询来获取数据,我从由一对多和多对一关系连接的两个表中进行选择,但是如果Map的表没有任何值,那么我甚至没有得到我选择的表的值。但当我把外键,然后它的工作很好,我是两个表的数据。
@Query("SELECT LD,REC FROM LayerDetails LD JOIN LD.recipeUser REC")
public List getLayerDetails();
这是我的sql查询,当recipeuser为null时,尽管有layerdetails的值,但我没有得到任何值。
2条答案
按热度按时间zfciruhq1#
这是因为
JOIN
这里是一个内部联接(如果不使用特定联接,这是默认的)。内部连接在LayerDetails
以及RecipeUser
. 然而,作为一个领域recipeUser
是null
在您的示例中,它没有用于该示例的元组LayerDetails
. 所以也要找到LayerDetails
,它们没有recipeUser
,您需要使用LEFT JOIN
相反。如果你想了解更多关于
JOIN
jpa的可能性,你可以看看https://www.objectdb.com/java/jpa/query/jpql/from 例如。nqwrtyyt2#
我提出了同样的问题。我通过
LEFT JOIN
反而很简单JOIN
.[inner]join-仅返回两个表中匹配的记录
完全联接-返回两个表中的记录。如果没有匹配项,则缺少的边将包含null。
left join—返回左表中的所有记录,右表中有匹配的记录(如果可用)。
右连接-返回右表中的所有记录,左表中有匹配的记录(如果可用)。
您可以查看sql联接的可视化表示,以了解更多详细信息。