Hibernate 带有createSQLQuery的ResultTransformer在实体字段中不强制使用camelCase

Hibernate 带有createSQLQuery的ResultTransformer在实体字段中不强制使用camelCase,hibernate,postgresql,Hibernate,Postgresql,我有一个sql查询,如下所示: List<Employee> employees = getCurrentSession() .createSQLQuery( "select" + e.id as id,e.first_name as firstName,e.password as password

我有一个sql查询,如下所示:

List<Employee> employees = getCurrentSession()
                    .createSQLQuery(
                            "select"
                                    + e.id as id,e.first_name as firstName,e.password as password
                                    + "from employee e,employee_role er,role r where e.employee_id=er.employee_id and er.role_id=r.role_id and r.name='ROLE_ADMIN' ")
                    .setResultTransformer(Transformers.aliasToBean(Employee.class))
                    .list();
我不知道hibernate从这个firstname属性中得到了什么?我的问题没有对吗

解决方法是将属性更改为firstname,以及getter和setter
但是,既然我想在我的领域中使用camelCase,那么有没有任何关于hibernate为什么会做出这种行为以及如何避免这种行为的想法,请给出建议。

这可能与您如何(以及是否)配置
NamingStrategy

如果您使用MySQL来判断是否启用了区分大小写的表/列名

,则可以使用它显式声明本机SQL的列别名:

  getCurrentSession()
  .createSQLQuery( "select e.id as id,e.first_name as firstName,e.password as password from xxxxxx")
                .addScalar("id",StandardBasicTypes.INTEGER )
                .addScalar("firstName",StandardBasicTypes.STRING )
                .addScalar("password",StandardBasicTypes.STRING )
                .setResultTransformer(Transformers.aliasToBean(Employee.class))
                .list();

对于更简单的解决方案,请在发送到服务器的查询中双引号引用标识符。而不是

e.first_name as firstName
应该是

e.first_name as "firstName"

在PostgreSQL中,双重引用标识符会强制区分大小写。不带引号,它(大部分)遵循SQL标准并折叠为一个大小写(尽管标准为大写的情况下是小写)。

addScalar+在查询中也选择as?我认为是这样,因为只有使用
addScalar()
而不使用
选择as
会给我错误。
e.first_name as "firstName"