2011-11-15 5 views
14

mam zapytanie SQL w następujący sposób:ResultTransformer z createSQLQuery zmusza żadnego CamelCase w dziedzinach jednostki

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(); 

Mam właściwość w Pracownika nazwie imię, ale podczas próby uruchomienia powyżej dao w badanej jednostki, ja otrzymuję następujący wyjątek:

org.hibernate.PropertyNotFoundException: Could not find setter for firstname on class com.app.domain.Employee 

Nie wiem, skąd pochodzi hibernacja z tej własności? Nie poprawiłem tego w moim zapytaniu? sposób obejścia tego problemu polegał na zmianie właściwości na imię, oraz na pobierających, seterach też , ale na jakichkolwiek pomysłach, dlaczego hibernacja robi takie zachowanie, i jak tego uniknąć, ponieważ chcę używać camelCase w mojej domenie, proszę doradzić .

Odpowiedz

21

można użyć addScalar(String columnAlias, Type type) jawnie zadeklarować alias kolumny swojego ojczystego języka 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(); 
+0

addScalar + wybierz również w zapytaniu? –

+0

Myślę, że tak, ponieważ tylko przy użyciu 'addScalar()' bez 'wybierz jako" da mi błędy. –

12

Aby uzyskać prostsze rozwiązanie, należy dwukrotnie podać identyfikator w zapytaniu wysłany do serwera. Zamiast

e.first_name as firstName 

powinien przeczytać

e.first_name as "firstName" 

W PostgreSQL dwukrotnie cytując siły identyfikator przypadek czułości. Unquoted, to (głównie) podąża za standardem SQL i składa się do pojedynczego przypadku (choć małe, gdy standard jest pisany dużymi literami).

Powiązane problemy