JPA 方法说明

实体的状态

实体对象拥有以下4个状态,这些状态通过调用EntityManager接口方法发生迁移:

1) 新建态:新创建的实体对象,尚未拥有持久化主键,没有和一个持久化上下文关联起来。

2) 受控态:已经拥有持久化主键并和持久化上下文建立了联系;

3) 游离态:拥有持久化主键,但尚未和持久化上下文建立联系;

4) 删除态:拥有持久化主键,已经和持久化上下文建立联系,但已经被安排从数据库中删除。

通过EntityManager中的接口方法可以改变实体对象的状态:

a) void persist(Object entity)

通过调用EntityManager的persist()方法,新实体实例将转换为受控状态。这意谓着当persist ()方法所在的事务提交时,实体的数据将保存到数据库中。如果实体已经被持久化,那么调用persist()操作不会发生任何事情。如果对一个已经删除的 实体调用persist()操作,删除态的实体又转变为受控态。如果对游离状的实体执行persist()操作,将抛出 IllegalArgumentException。

在一个实体上调用persist()操作,将广播到和实体关联的实体上,执行相应的级联持久化操作;

b) void remove(Object entity)

通过调用remove()方法删除一个受控的实体。如果实体声明为级联删除(cascade=REMOVE 或者cascade=ALL ),被关联的实体也会被删除。在一个新建状态的实体上调用remove()操作,将被忽略。如果在游离实体上调用remove()操作,将抛出 IllegalArgumentException,相关的事务将回滚。如果在已经删除的实体上执行remove()操作,也会被忽略;

c) void flush()

将受控态的实体数据同步到数据库中;

d) T merge(T entity)

将一个游离态的实体持久化到数据库中,并转换为受控态的实体;

e) T find(Class entityClass, Object primaryKey)

以主键查询实体对象,entityClass是实体的类,primaryKey是主键值;

f) Query

JPA使用javax.persistence.Query接口代表一个查询实例,Query实例由EntityManager通过指定查询语句构建。该接口拥有众多执行数据查询的接口方法:◆Object getSingleResult():执行SELECT查询语句,并返回一个结果;

◆List getResultList() :执行SELECT查询语句,并返回多个结果;

◆Query setParameter(int position, Object value):通过参数位置号绑定查询语句中的参数,如果查询语句使用了命令参数,则可以使用Query setParameter(String name, Object value)方法绑定命名参数;

◆Query setMaxResults(int maxResult):设置返回的最大结果数;

◆int executeUpdate():如果查询语句是新增、删除或更改的语句,通过该方法执行更新操作;

还有就是关于JPA的查询语言,JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,其查询语言类似于HQL语句,在这里就不再赘述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田猿笔记

写文章不容易,希望大家小小打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值