Java 在JPA查询中修改属性名

Java 在JPA查询中修改属性名,java,hibernate,jpa,annotations,Java,Hibernate,Jpa,Annotations,我使用的是在字段名前面加下划线的惯例。当我生成带有此类字段的注释实体类时,我总是在查询中使用带下划线前缀的属性名。我希望避免这种情况,并能够做到: @Entity public class Container { private String _value; } // in a lookup method executeQuery("from Container where value = ?", value); 一般来说,JPA还是Hibernate都有可能做到这一点 更新:仍

我使用的是在字段名前面加下划线的惯例。当我生成带有此类字段的注释实体类时,我总是在查询中使用带下划线前缀的属性名。我希望避免这种情况,并能够做到:

@Entity
public class Container {

    private String _value;
}

// in a lookup method
executeQuery("from Container where value = ?", value);
一般来说,JPA还是Hibernate都有可能做到这一点



更新:仍在试图记住原因,但我需要在字段上而不是在getter上对此进行注释。

您可能可以编写生成的实体类的子类,这些实体类上有getter方法,然后配置实体管理器,如果需要字段访问,则使用getter/setter访问?然后,您的getter/setter可以有您喜欢的任何名称。

您可以为getter添加注释:

@Entity
public class Container {

    private String _value;

    @Column
    public String getValue()
    {
        return _value;
    }

    public void setValue( String value )
    {
        this._value = value;
    }

}

看一看。扩展
DefaultNamingStrategy
并重写
columnName
方法以去除第一个下划线(如果有)将相当容易。

如果生成了类,则可能不是一个选项。您确定这处理的是属性名而不是数据库列名吗?javadoc声明它是“一组规则,用于根据映射文档中的信息确定物理列和表名。”。Hibernate只处理属性(或字段)到数据库的映射。没有可以使用的“其他”名称。此解决方案将在数据库中为您提供专有名称,但您的属性名称(在HQL或条件查询中)仍将具有下划线。我想你只能用另一个建议,然后用getter。