我有一个实体:
@Entity
@Table
public class ClassA{
public static final String COL_VERSION = "VersionABC";
public static final String COL_DATA = "DataABC";
@Column(name = COL_VERSION)
private String version;
@Column(name = COL_DATA)
private String data;
}
在我的DAO中:
EntityManager mgr = getEntityManager();
CriteriaBuilder builder = mgr.getCriteriaBuilder();
CriteriaUpdate<ClassA> criteriaUpdate = builder.createCriteriaUpdate(ClassA.class);
Root<ClassA> root = criteriaUpdate.from(ClassA.class);
criteriaUpdate.set(root.get("data"), newData);
if (//condition){
criteriaUpdate.set(root.get("version"), newVersion);
}
mgr.createQuery(criteriaUpdate).executeUpdate();
这个代码可以工作,但是如何使用ClassA.COL_VERSION
和ClassA.COL_DATA
而不是使用硬代码"data"one_answers"version"呢?
try like this it should be _. instead of ._
EntityManager mgr = getEntityManager();
CriteriaBuilder builder = mgr.getCriteriaBuilder();
CriteriaUpdate<ClassA> criteriaUpdate = builder.createCriteriaUpdate(ClassA.class);
Root<ClassA> root = criteriaUpdate.from(ClassA.class);
criteriaUpdate.set(root.get(ClassA_.data), newData);
if (//condition){
criteriaUpdate.set(root.get(ClassA_.version), newVersion);
}
mgr.createQuery(criteriaUpdate).executeUpdate();
引用http://www.programcreek.com/java-api-examples/index.php?api=javax.persistence.criteria.CriteriaUpdate
您可以使用可以自动生成的元模型类。如果你使用maven来控制依赖,那么添加这个插件,它将为你生成元模型类。
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>2.2.4</version>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<processors>
<processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>5.2.2.Final</version>
</dependency>
</dependencies>
</plugin>
一旦生成元模型类,您就可以使用属性名,如…
用root.get(ClassA_.data)
代替root.get("data")