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

@加入列涉及EAGER在单声道关系中获取

暨嘉
2023-03-14

我在两个具有以下结构的类之间有@OneToOne关系:

用户:

@Getter
@Setter
@NoArgsConstructor
@Entity
public class User implements Serializable {

    @Id
    private Integer id;
    private String login;
    private String password;
    private String name;
    private String address;
    private Boolean active;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns( {@JoinColumn(name = "userDetailId", referencedColumnName="id",  insertable=false, updatable=false),
            @JoinColumn(name = "address", referencedColumnName="location", insertable=false, updatable=false)} )
    private UserDetail userDetail;

}

用户详情:

@Getter
@Setter
@NoArgsConstructor
@Entity
public class UserDetail implements Serializable {
    @Id
    private Integer id;
    private String location;

}

在我的userRepository中,我使用entityGraph在userDetail查询中获得一个左连接

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
     @EntityGraph(attributePaths = {"userDetail"})
     List<User> findAll();
}

当我调用findAll()时,我希望有一个左连接查询,所以hibernate使用左连接进行查询,并对用户表中的每一行的用户_详细信息进行查询,如下所示:

Hibernate: 
    select
        user0_.id as id1_0_0_,
        userdetail1_.id as id1_1_1_,
        user0_.active as active2_0_0_,
        user0_.address as address3_0_0_,
        user0_.login as login4_0_0_,
        user0_.name as name5_0_0_,
        user0_.password as password6_0_0_,
        user0_.user_detail_id as user_det7_0_0_,
        userdetail1_.location as location2_1_1_ 
    from
        user user0_ 
    left outer join
        user_detail userdetail1_ 
            on user0_.user_detail_id=userdetail1_.id 
            and user0_.address=userdetail1_.location
Hibernate: 
    select
        userdetail0_.id as id1_1_0_,
        userdetail0_.location as location2_1_0_ 
    from
        user_detail userdetail0_ 
    where
        userdetail0_.id=? 
        and userdetail0_.location=?

如何use_detail查询?我已经试过了

@Fetch(FetchMode.JOIN)
@LazyToOne(LazyToOneOption.NO_PROXY)

当我使用一个单一的主键@JoinColiv而不是@JoinCronSHibernate只做一个查询与左连接作为我除了但我需要一个多键

谢谢你读我

共有2个答案

吕作人
2023-03-14

我会尝试将属性optional=false@OneToOne注释一起使用:

@OneToOne(optional=false)

我以前解决过这个问题,如果我没记错的话,对你来说可能是正确的。

穆丁雨
2023-03-14

这并不像@OneToOne(默认为Lazy)或@ManyToOne那样容易

一个可能的解决方案是只有可能无效的实体一对一的拒绝,并根据需要获取该实体。

https://stackoverflow.com/a/60108442/10218258给出了很好的解释。

 类似资料:
  • 我试图在一个使用框架Django的项目中遵循TDD方法。我正在创建和测试模型及其功能(保存方法、信号……)和其他依赖模型的高级功能。 我知道单元测试必须尽可能地孤立,但我发现自己使用FactoryBoy为每个测试创建了大量的表和关系,因此我的测试不够强大,因为如果模型中的某些东西发生了变化,很多测试可能会被破坏。 如何避免所有这些依赖,让测试更干净?

  • 给定以下monos: 双: 和: 具有相同的输出: 和之间有什么区别,在这种情况下? 从https://projectreactor.io/docs/core/release/reference/index.html#which-operator: [如果你]有一个序列,但[你]对值不感兴趣,并且[你]想在最后切换到另一个单声道,[使用]。 [如果您]希望通过将发布者从1个Mono和任何源端协调到

  • 智能机器人可以做到的事情可以很复杂:文字、语音、视频识别与合成;自然语言理解、人机对话;以及驱动硬件设备形成的“机器”人。作为一个只有技术和时间而没有金钱的IT人士,我仅做自然语言和人工智能相关的内容,不涉及硬件,也不涉及不擅长的多媒体识别和合成。所以索性就做一个可以和你说话,帮你解决问题的聊天机器人吧。 聊天机器人涉及到的知识主要是自然语言处理,当然这包括了:语言分析和理解、语言生成、机器学习、

  • 但是,它没有从地址表返回正确的。我怎么能那么做? 这是我得到的错误消息:

  • 我最近一直在学习使用Java中的reactor库和Spring框架进行反应式编程,并且在很大程度上我已经能够掌握它。然而,我发现自己有好几次遇到同样的情况,我想知道我哪里出了问题。 我正在努力解决的问题的要点是,我经常想用mono做一些事情,比如找到一些补充数据,然后将其添加回原始mono中。zip函数在我看来是一个理想的候选函数,但最终我订阅了两次原始mono,这不是我的意图。 这里有一个人为的

  • 问题内容: 为了帮助理解monad是什么,有人可以使用Java提供示例吗?有可能吗? 如果您从此处http://jdk8.java.net/lambda/下载预发行版本的兼容Lambda的JDK8,则可以使用Java使用Lambda表达式。 下面显示了使用此JDK的lambda示例,有人可以提供相对简单的monad吗? 问题答案: 仅供参考: 提出的JDK8可选类 确实满足 了Monad的三个定律