在JPA查询中修改属性名称

4

我使用下划线作为字段名称的前缀约定。当我生成带有这些字段的注释实体类时,我只能在查询中使用带下划线前缀的属性名称。我想避免这种情况,并且能够执行以下操作:

@Entity
public class Container {

    private String _value;
}

// in a lookup method
executeQuery("from Container where value = ?", value);

一般情况下,或者特别是使用Hibernate,这是否可能使用JPA?


更新:仍在努力回忆为什么,但我需要将其注释在字段上而不是在getter方法上。

3个回答

4
你可以为getter添加注释:
@Entity
public class Container {

    private String _value;

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

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

}

如果类是自动生成的,则可能不是一种选择。 - skaffman

1
你可以编写生成的实体类的子类,为它们编写getter方法,然后配置实体管理器以使用getter/setter访问而不是字段访问。这样,你的getter/setter可以使用任何你喜欢的名称。

0

看一下NamingStrategy。相当容易扩展DefaultNamingStrategy并覆盖columnName方法以去掉第一个下划线(如果有的话)。


你确定这个处理的是属性名而不是数据库列名吗?Javadoc中指出它是“根据映射文档中的信息确定物理列和表名的一组规则。” - Robert Munteanu
嗯,你说得对。Hibernate仅涉及属性(或字段)到数据库映射。您无法使用“其他”名称。此解决方案将为您提供数据库中的正确名称,但是您的属性名称(在HQL或Criteria查询中)仍将带有下划线。我认为您只能使用另一个建议并使用getter。 - Maarten Winkels

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接