jpa 手动预编译_编译时检查JPA查询

本文介绍了JPA中手动预编译查询的概念,强调了使用Criteria API和元模型进行编译时检查的重要性。通过示例展示了如何使用Criteria API构建查询,并解释了元模型如何帮助避免因实体属性更改而导致的运行时错误。
摘要由CSDN通过智能技术生成

jpa 手动预编译

JPA提供了几种查询数据的方法。 可以根据各种标准(例如,使用的语言(SQL与JPQL)或查询是静态的(编译时间)还是动态的(执行时间))对此类替代方案进行分类。

静态查询是使用@Entity类定义本身中的注释@NamedQueryjavax.persistence.NamedQuery )和@NamedQueriesjavax.persistence.NamedQueries )定义的:

@NamedQuery(
            name="findAllCustomersWithName",
            query="SELECT c FROM Customer c WHERE c.name LIKE :custName"
    )

另一方面, EntityManager提供了分别接受JPQL或SQL查询的createQuery(…)createNativeQuery(…)方法。

因此,可以在编译或执行时定义查询。

注意 :建议始终使用Query中的 setParameter(…)方法来使用参数化查询,以避免SQL注入漏洞。)

标准API

但是,JPA提供了另一种查询对象的方法: Criteria API 。 确实,切换到JPA的动机之一是处理对象而不是SQL方言,不是吗?

让我们看一个示例代码。

实体定义:

@Entity
public class User {

 @Id
 private Integer userId;

 @Basic
 @Column(length=15, nullable=false)
 private String name;

 @Basic
 @Column(length=64, nullable=false)
 private String userDigestedPasswd;

 @Basic
 @Column(l
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值