Java 类org.hibernate.jpa.criteria.CriteriaBuilderImpl 实例源码
项目:genericdao
文件:GenericJpaRepositoryImpl.java
/**
* 使用动态更新的方法更新数据库简单映射字段的内容
* @param entity
* @param updateFieldsName
* @return
*/
public T updateSimpleField(T entity , Collection<String> updateFieldsName){
Assert.notEmpty(updateFieldsName , entity.getClass()+"更新字段不能为空。");
Assert.isTrue(!entityInformation.hasCompositeId() , "不支持组合ID更新。");
CriteriaUpdate<T> criteriaUpdate = new CriteriaUpdateImpl<T>(
(CriteriaBuilderImpl) entityManager.getCriteriaBuilder()) ;
//更新的实体对象
Root<T> root = criteriaUpdate.from(getDomainClass()) ;
for (String fieldName : updateFieldsName) {
try {
//通过反射读取属性的值
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(fieldName, entity.getClass()) ;
criteriaUpdate.set(fieldName, propertyDescriptor.getReadMethod().invoke(entity,null)) ;
} catch (Exception e) {
e.printStackTrace();
}
}
//构造更新过滤条件
String idField = entityInformation.getIdAttributeNames().iterator().next() ;
Predicate predicate = entityManager.getCriteriaBuilder().equal(
root.get(idField) , entityInformation.getId(entity)) ;
criteriaUpdate.where(predicate) ;
//执行更新
entityManager.createQuery(criteriaUpdate).executeUpdate() ;
return entity ;
}
项目:oma-riista-web
文件:JpaSpecsTest.java
@Before
public void setup() {
cb = spy(new CriteriaBuilderImpl(null));
}
项目:genericdao
文件:GenericJpaRepositoryImpl.java
/**
* 查询单个字段
* @param field 字段名称
* @param spec 查询条件
* @return
*/
public List<String> querySingleFields(String field , Specification<T> spec){
if(StringUtils.isBlank(field)){
return null ;
}
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder() ;
CriteriaQuery<Object[]> query = criteriaBuilder.createQuery(Object[].class) ;
Root<T> root = applySpecificationToCriteria(spec , query) ;
//创建对字段的选择
List<Selection<?>> selectionItems = new ArrayList<>(1) ;
selectionItems.add(root.get(field)) ;
CompoundSelection<Object[]> compoundSelection = null ;
if(criteriaBuilder instanceof CriteriaBuilderImpl){
compoundSelection = ((CriteriaBuilderImpl)criteriaBuilder).array(selectionItems) ;
}
query.select(compoundSelection) ;
TypedQuery<Object[]> typedQuery = entityManager.createQuery(query) ;
applySecondLevelCache(typedQuery , spec) ;
List<Object[]> list = typedQuery.getResultList() ;
//转换查询结果
List<String> resultList = null ;
if(list!=null && list.size()>0){
resultList = new ArrayList<>(list.size()) ;
//构造查询结果
for (Object object : list) {
if(object!=null){
resultList.add(object.toString()) ;
}
}
}
return resultList ;
}