Chr*_*ell 4 eclipselink jpa-2.0
是否可以(不编写自定义SQL)让Eclipselink信任我是否在合并上执行更新或插入,而不是执行选择,然后执行更新或插入?如果是这样,怎么样?
在我看来,我想使用瞬态标志和自定义if语句来确定该项是否已经在数据库中,并指示eclipselink执行所需的查询.我理解Hibernate提供了这个作为update()和save()
一些值得注意的要点:
谢谢.也许我错过了一些明显的东西!
您正在寻找的是EclipseLink中的存在检查,可以使用@ExistenceChecking注释进行配置,如下所述:http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_existencechecking.htm
尝试指定@ExistenceChecking(ExistenceType.CHECK_CACHE),因为它声明check_cache是默认值,这适用于Native EclipseLink项目.JPA项目使用Check_Database作为默认值,以符合JPA规范,要求合并调用在必要时合并到数据库中的数据.使用check_cache将阻止EclipseLink进行查询,因此您可以根据自己的标准查询自己.现有对象将需要在缓存中,否则无法合并,EclipseLink将必须执行插入.
另一种选择是使用定制器来定义用于每个类的DoesExistQuery.这可以允许您覆盖checkEarlyReturn方法以根据需要执行以确定是否存在.
上面的选项仍然使用JPA合并,因此仍然需要将现有数据合并到 - 因此它仍然需要选择不在缓存中的现有对象.如果您只是更新所有类型语句,它将更新对象或按原样插入对象,而不仅仅跟踪已更改的内容,您可以尝试查看本机EclipseLink功能,例如UnitOfWork api.使用类似((EntityManagerImpl)em.getDelegate()).getUnitOfWork().updateObject(entity)或使用UOW执行自己的UpdateObjectQuery将避免选择现有对象,而只丢失发送更改.
| 归档时间: |
|
| 查看次数: |
2113 次 |
| 最近记录: |