在 JPA 中哪种类型的参数更适合使用“位置/命名”?

use*_*322 0 java hibernate jpa-2.0 jakarta-ee

以 Hibernate 作为提供者。

在性能(或其他)方面,哪种类型的参数更适合使用?为什么?

位置的

TypedQuery<Client> query = em.createQuery
  ("FROM Client c WHERE c.clientId = ?1",Client.class);
query.setParameter(1, clientId);
Run Code Online (Sandbox Code Playgroud)

命名

TypedQuery<Client> query = em.createQuery
  ("FROM Client c WHERE c.clientId = :clientId",Client.class);
query.setParameter("clientId", clientId);
Run Code Online (Sandbox Code Playgroud)

Man*_*uPK 5

在这种情况下,您不应该真正考虑性能,命名参数有助于提高代码的可读性。即使它慢了几纳秒左右,你也应该坚持下去。

TypedQuery<Client> query = em.createQuery
  ("FROM Client c WHERE c.clientId = :clientId",Client.class);
query.setParameter("clientId", clientId);
Run Code Online (Sandbox Code Playgroud)

在上面几行中,很明显您正在为 设置值clientId它简单、清晰、清晰,而且你想如何编码

  • 此外,使用命名参数使 HQL/JPQL 查询重构比使用位置参数更容易且不易出错 (2认同)