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

JPA hibernate在内部执行多个select查询

姚智
2023-03-14

问题陈述:在JPA hibernate中,我执行了一个方法

Contact=entityManager。查找(Contact.class,Integer.valueOf(contactId))

正如预期的那样,EntityManager触发一个select查询以获取联系人对象,但之后它触发另一个select查询以获取我不想要的客户对象
客户对象是联系人对象中的子对象
联系人实体有一个外键customerId。

要求:我希望entityManager启动一个select查询,获取联系人对象,之后什么都不做,没有第二个select查询,也没有join查询。联系人对象:

@Entity
@Table(name = "contact")
public class Contact {
    @JsonProperty("contactId")
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "Id")
    int contactId;

    @Column(name = "firstname")
    @JsonProperty("firstName")
    String firstName;

    @Column(name = "lastname")
    @JsonProperty("lastName")
    String lastName;

    @Column(name = "phone1")
    @JsonProperty("phone1")
    String phone1;

    @ManyToOne(optional = false, fetch = FetchType.LAZY, targetEntity = Customer.class)
    @JoinColumn(name = "customer_id", updatable = false)
    @Fetch(FetchMode.JOIN)
    Customer customer;

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }
}

共有1个答案

万俟修诚
2023-03-14

我认为你的问题来自于使用@FetchM(FetchMode.join)和懒惰加载。如果你不想急切地加载客户,那么你应该删除@Fetch(FetchMode.join),只使用懒惰加载

请在此处查看更多关于此的信息(https://stackoverflow.com/a/29667050/2637940):

首先,@Fetch(FetchMode.JOIN)和@ManyToOne(Fetch=FetchType.LAZY)是对立的,一个指示快速抓取,而另一个建议延迟抓取。

 类似资料:
  • 我知道我们可以通过使用: 但我如何选择这样的东西: 我想在myclass内部同时选择(p,h2)和(p>a) 如果我只用 我无法获得内部p的内容。 我怎么能那样做?

  • 需求:从一个用户界面,我得到一个数据库表的选定列表。这些表中的数据将被提取并存储在文件位置。我们希望使用NiFi Rest API,因为有定制UI的需求。因此,我们使用REST API调用NiFi处理器。 问题是如何在循环中为在分隔字符串中接收的每个表名调用ExecuteSQL。 如果需要更多的信息,请让我知道。

  • 我希望在一个select请求中运行以下查询: 问题是所有内容都是由单独的多个查询获取的。我只希望团队和团队的球员和每个球员的技能在一个请求中被获取。但是相反,我有多个选择查询来获取每个团队、玩家、每个玩家的统计数据和技能。 以下是与注释一起使用的实体: 游戏实体: 团队实体: 玩家实体: 你能指出所犯的错误吗?我需要一个选择查询来加载游戏,它是团队、团队的球员和每个球员的技能。 编辑1:以下是po

  • 问题内容: 我得到一张下表: 如果用户搜索“ 1”,则程序将查看具有“ 1”的,然后它将在“ 5”中得到一个值,然后程序将继续在其中搜索“ 5”,并且将得到“ 3”在中,依此类推。因此它将打印出: 如果用户搜索“ 6”,它将打印出: 如何建立一个查询来做到这一点? 问题答案: 编辑 @leftclickben提到的解决方案也是有效的。我们也可以对它使用存储过程。 我们使用临时表存储输出结果,并且由

  • 问题内容: 我有以下方法: 在这里,我依次调用三种方法,这依次命中数据库并获取我的结果,然后对从数据库命中获得的结果进行后处理。我知道如何通过使用并发调用这三种方法。但是我想用Java 8 来实现。有人可以指导我如何通过并行流实现相同目标吗? 编辑 我只想通过Stream并行调用方法。 问题答案: 您可以利用这种方式:

  • 我有访问MySQL(5.7)数据库Wicket(8.6)应用程序。在spring-context.xml中建立mysql连接,如下所示: 我遇到的问题是,我需要执行一个非常长的SQL查询,根据所选的时间范围,这可能很容易花费几分钟的时间。我已经解释过,当执行查询时,整个wicket应用程序会减慢到这样的程度,即不再执行其他查询。顺便说一句:长查询只是一个读取查询。所以它不应该锁定一个表。br>如果