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

不使用主键的JPA查询

段良弼
2023-03-14

使用JPA2。0(通过Hibernate 4),我可以使用EntityManager在数据库中查询查询条件为主键的记录。查找(java.lang.Class entityClass,java.lang.Object primaryKey)。但是,如果查询条件不是主键(例如,选择city值为“london”的所有记录),我是否必须创建一个TypedQuery并显式提供SQL语句?我应该采取什么最佳做法?

共有1个答案

邢硕
2023-03-14

JPA Criteria API为您提供了编译时安全级别,而这是构建自己的动态查询(使用jpql或sql)所无法获得的。特别是当大量条件开始进入时(可选字段、条件子查询等)犯错误变得非常容易。

CriteriaAPI的编写可能更复杂(特别是对于简单的查询),您需要围绕CriteriaAPI创建一些管道代码,使其成为真正动态且易于使用的语言。它并不是真正的开箱即用。

一些人喜欢使用CriteriaAPI,而另一些人更喜欢命名查询/JPQL。

 类似资料:
  • 我正在两个应用程序之间进行基准测试,一个是用构建的,另一个是用构建的。总体而言,差异不太大(小于一个数量级)。唯一的例外是当我通过主键获取记录时 使用JDBC的时间不超过10毫秒,使用Hibernate的时间从不低于60毫秒。我已经安装了ehcache,但是对于这个特定的查询,差异仍然是一样的<有没有什么我不知道的技巧? ---编辑 JPA映射和类是使用Hibernate工具构建的,它们没有什么特

  • 有一个简单的查询,我只需要在上面运行一个select。下面是示例select语句。 对于查询结果,我创建了一个名为Capacity的简单实体类。 当我的应用程序启动时,我得到一个错误,“没有为实体指定标识符”。我强调了Entity需要定义Id属性,但在本例中,表没有真主键。 我还尝试将类更改为@Embedbable类型,但我得到以下错误“Errors in named Queries” 下面是我使

  • 在我的应用程序中,我有一个场景,根据给定的输入代码和日期从实体中获取数据。代码和日期的组合将是唯一的,并将返回单个记录。 请建议。

  • 我有一个用户表,ID列作为主键。我有这个功能在控制器: 此函数不回显任何内容。如果我从$id更改为$name,如下所示:

  • 我在Cassandra中有一个表,定义为 我在这张表中插入了数十亿条记录。现在我想用CQL查询表 null 谢谢!

  • 问题内容: 我的JPA模型中有以下类(省略了getters,setters和无关字段): 我需要定义一个类,使得当从所述类生成DDL时,相应的表的主键被由密钥和。我尝试了以下方法: 但这会为表生成以下内容: 请注意,和都是可为空的,当我尝试将DDL加载到SQL Server时会导致以下错误 无法在表“ PRICE”中的可为空的列上定义PRIMARY KEY约束 我不明白为什么这些可以为空,因为在域