ResultTransformer avec createSQLQuery ne force pas camelCase dans les champs d'entité
J'ai une requête sql comme suit:
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();
J'ai une propriété de l'Employé appelé prénom, mais lorsque j'essaie d'exécuter au-dessus de dao dans une unité de test, je suis l'exception suivante:
org.hibernate.PropertyNotFoundException: Could not find setter for firstname on class com.app.domain.Employee
Je ne sais pas où hibernate obtenir à partir de ce prénom propriété ? Je n'ai pas droit à ma requête ?
toute façon, la solution a été de changer la propriété de prénom, et getters,setters trop
mais des idées pourquoi hibernate est de faire un tel comportement, et comment l'éviter, car je veux utiliser camelCase dans mon domaine, veuillez nous en aviser.
source d'informationauteur fresh_dev
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser addScalar(String columnAlias, Type Type) de déclarer explicitement l'alias de colonne de votre natif SQL:
Pour une solution plus simple, double-citation de l'identifiant dans la requête envoyée au serveur. Au lieu de
il faut lire
Dans PostgreSQL, double-citant un identificateur forces de la casse. Non cotées, (la plupart) suit le SQL standard et se replie pour un seul cas (bien que moins élevés cas où la norme est en majuscules).
Cela vient peut-être de savoir comment ( et si ) vous avez configuré votre
NamingStrategy
http://matthew.mceachen.us/blog/hibernate-naming-strategies-20.html
ou
si vous utilisez MySQL à temps ou non vous avez activé la casse table/colonne de noms http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html