Hibernate 带有createSQLQuery的ResultTransformer在实体字段中不强制使用camelCase
我有一个sql查询,如下所示: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
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"