jpa條件查詢,or,and 使用
@Autowired private EntityManager entityManager; @Test public void test01() { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<UserPO> query = cb.createQuery(UserPO.class); Root<UserPO> root = query.from(UserPO.class); Predicate id = cb.equal(root.get("id"), 2); Predicate id1 = cb.like(root.get("name"), "%現場%"); Predicate or = cb.or(id, id1); query.where(or); List<UserPO> resultList = entityManager.createQuery(query).getResultList(); resultList.forEach(r -> { r.setAccount("123"); }); System.out.println(one); System.out.println(resultList); }
entityManager修改
記得加上事務注解
import org.springframework.transaction.annotation.Transactional;
@Transactional
entityManager.merge(taskAttributePO1);
JPAQueryFactory注入
需要先將這個類交由spring管理
@Configuration public class BeanConfig { @Bean public JPAQueryFactory jpaQuery(EntityManager entityManager){ return new JPAQueryFactory(entityManager); } }
然后再使用注解注入即可
@Resource private JPAQueryFactory jpaQueryFactory;
JPAQueryFactory用法
jpaQueryFactory = new JPAQueryFactory(entityManager);
QUserPO userPO = QUserPO.userPO; JPAQuery<UserPO> query = jpaQueryFactory.select(QUserPO.userPO).from(userPO); BooleanExpression c = userPO.id.eq(2).or(userPO.id.eq(1)).or(userPO.id.eq(3)); JPAQuery<UserPO> where = query.where(c); List<UserPO> fetch = where.fetch(); System.out.println(fetch);
/** * @Transactional事務使用總結: * * 1、異常在A方法內拋出,則A方法就得加注解 * 2、多個方法嵌套調用,如果都有 @Transactional 注解,則產生事務傳遞,默認 Propagation.REQUIRED * 3、如果注解上只寫 @Transactional 默認只對 RuntimeException 回滾,而非 Exception 進行回滾 * 如果要對 checked Exceptions 進行回滾,則需要 @Transactional(rollbackFor = Exception.class) * * org.springframework.orm.jpa.JpaTransactionManager * * org.springframework.jdbc.datasource.DataSourceTransactionManager * * org.springframework.transaction.jta.JtaTransactionManager * * * */
jpaQueryFactory根據條件刪除
QTaskGroupPersonPO taskGroupPersonPO = QTaskGroupPersonPO.taskGroupPersonPO; long execute = jpaQueryFactory.delete(taskGroupPersonPO).where(taskGroupPersonPO.taskGroupId.eq(taskGroupId)).execute();