java - 使用 CriteriaUpdate 查询时如何避免硬编码 attributeName?

标签 java hibernate jpa

我有一个实体:

@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_VERSIONClassA.COL_DATA 而不是使用硬代码“数据”和“版本”?

最佳答案

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

关于java - 使用 CriteriaUpdate 查询时如何避免硬编码 attributeName?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39240826/

相关文章:

java - '%' Tomcat字符解码异常

java - weblogic 上的 Hibernate/JPA 继承问题

在处理基础知识时 hibernate 子树的意外结尾

java - Hibernate @AttributeOverride 导致将属性设置为@Transient

mysql - java.lang.NoClassDefFoundError : org/hibernate/metamodel/source/annotations/JPADotNames Error 错误

java - JTextField 监听器在文本更改时修改 textField 的文本

java - 在 OSX : How to Trap command-Q? 上 Swing

java - Springfox Bean Validations @Size 注释在列表上无法正常工作

java - Hibernate ManyToOne 映射不在 PKey 上

database - 一对多关系中的@JoinColumn 和@JoinTable 有什么区别?