当前位置: 首页 > 知识库问答 >
问题:

当实体之间没有关系映射时,在JPA中连接两个表

贺飞星
2023-03-14

我有一个用户实体和一个宠物实体。在用户和宠物之间没有“一个多人”、“许多人”或其他。原因是每个用户可能有数千只宠物(至少在本例中是这样)。由于我不想急于加载它(速度太慢),也不想延迟加载(导致延迟初始化异常……而且我不想使用视图中打开的过滤器),所以我在用户存储库中创建了这样一个名称的方法(原因是我想有机会只返回关系属性的子集。我不想要用户的所有宠物:

<代码>getPetsForUser(最终用户){…} 。我在JPA中看到的连接示例显然在实体上使用了关系属性。我如何在JPA中做到这一点?

SQL我会用外键...

共有2个答案

曾涵育
2023-03-14


一种方法是使用本机SQL查询并将结果管理为List

List<Pet> getPetsForUser(final User user) {
    Session s = entityManager.unwrap(Session.class);
    List<Pet> pets = s.createSQLQuery("select * from PETS p inner join USERS u on (p.user_id = u.id) where u.id = :id").setParameter("id",user.getUserID()).setResultTransformer(new AliasToBeanResultTransformer(Pet.class)).list();
}

闻人伟
2023-03-14

您必须显式地使用外键,可能是从用户对象(User.getId())中提取外键,然后将其用作原始的长字段或Pet上的等效字段,没有外键完整性、级联或基于查询的联接。

您最好重新审视为什么延迟加载工作是一件坏事,以及JPA是否是正确的方法

 类似资料:
  • 我有两个词A,B。在这个词中A是父词,有下面的表结构。 A1-->Acolumn 甚至我也尝试过使用普通连接。PLS让我知道我错过了什么。 我使用@query来指定query。选择a From TableA a LEFT OUTER JOIN FETCH a.tableAcollection p,其中a.tableacolum=?1和p.tablebcolumn<>p.tablebcolumn。

  • 我在这里粘贴类: 链类: 相机项目类别:

  • 问题内容: 我有具有相同结构的不同表,我想通过它们的一列将它们连接起来。 问题在于他们不共享该列中的信息。 结果表: (在单列中) 到目前为止,我已经尝试过: 我知道我的查询是错误的,因为我要调用更多我想要的列,但是我不确定如何将所有列合并到一个列中。我该怎么做? 问题答案: 你有没有尝试过? 如果您不想排除重复的值,则可能要使用。 要限制结果集,您可以执行以下操作:

  • 如何为这种多对多关系分配默认值?制作两个关联表->一个用于收件箱-关系,另一个用于发件箱-关系会更好吗?我该如何做到这一点?这个问题的其他解决方案? 任何帮助都非常感谢--非常感谢!

  • 我正在努力使用jpa Crudepository接口连接两个实体模型。我不知道如何映射两个实体模型并在@query注释中编写查询。这些是我的实体类。我想执行这个查询“从taxi\u driver\u映射中选择dppd.payment\u plan\u id,dppd.attribute\u value,dppd.attribute\u id作为tdm加入driver\u payment\u pla