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。