fre*_*dev 17 postgresql hibernate
我有一个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();
Run Code Online (Sandbox Code Playgroud)
我在Employee中有一个名为firstName的属性,但是当在单元测试中尝试在dao上运行时,我收到以下异常:
org.hibernate.PropertyNotFoundException: Could not find setter for firstname on class com.app.domain.Employee
Run Code Online (Sandbox Code Playgroud)
我不知道hibernate从这个firstname属性中得到了什么?我的查询中没有对它?
任何方式的解决方法是将属性更改为firstname,getter,setter,但任何想法为什么hibernate正在进行此类行为,以及如何避免它,因为我想在我的域中使用camelCase,请指教.
Ken*_*han 23
您可以使用addScalar(String columnAlias,Type type)显式声明本机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();
Run Code Online (Sandbox Code Playgroud)
Mat*_*ood 17
对于更简单的解决方案,请将查询中的标识符双重引用发送到服务器.代替
e.first_name as firstName
Run Code Online (Sandbox Code Playgroud)
它应该读
e.first_name as "firstName"
Run Code Online (Sandbox Code Playgroud)
在PostgreSQL中,双引号标识符会强制区分大小写.不带引号,它(大部分)遵循SQL标准并折叠为单个案例(尽管标准是大写的小写).
| 归档时间: |
|
| 查看次数: |
26800 次 |
| 最近记录: |