2016-12-19 8 views
1

У меня есть объект, у которого есть свойство boolean.Как установить true с помощью CriteriaUpdate?

class MyEntity { 
    @Basic(optional = false) 
    @Column(name = "FLAG") 
    private boolean flag; 
} 

Как я могу выполнить установки насыпного обновления в flag поле с true?

// UPDATE MyEntity AS e SET e.flag = TRUE 
final CriteriaBuilder builder = entityManager.getCriteriaBuilder(); 
final CriteriaUpdate<MyEntity> update 
    = builder.createCriteriaUpdate(MyEntity.class); 
final Root<MyEntity> root = criteriaUpdate.from(MyEntity.class); 
update.set(root.get(ProfileClue_.flag), ???); 

ответ

1

Использование чистого JPA Я хотел бы сделать что-то вроде

final CriteriaBuilder builder = entityManager.getCriteriaBuilder(); 
final CriteriaUpdate<MyEntity> update = builder.createCriteriaUpdate(MyEntity.class); 
final Root<MyEntity> root = criteriaUpdate.from(MyEntity.class); 
Expression trueLiteral = builder.literal(Boolean.TRUE); 
update.set(root.get(ProfileClue_.flag), trueLiteral); 

Использование более продвинутую поставщика JPA, который поддерживает параметры в других частях запроса, чем спецификации мандатов JPA (поддерживается DataNucleus JPA, и, возможно, другие), вы можете сделать его параметром.

final CriteriaBuilder builder = entityManager.getCriteriaBuilder(); 
final CriteriaUpdate<MyEntity> update = builder.createCriteriaUpdate(MyEntity.class); 
final Root<MyEntity> root = criteriaUpdate.from(MyEntity.class); 
ParameterExpression<String> param = builder.parameter(Boolean.class, "myParam"); 
update.set(root.get(ProfileClue_.flag), param);