Voor een simple crud functionaliteit wou ik gebruik maken van hibernate en HQL.
Aan de slag met het maken van een mapping file:
<hibernate-mapping>
<class name=”mandaatkracht.crud.hibernate.User” table=”users”>
<id column=”username” name=”userName”>
<generator class=”assigned”/>
</id>
<property column=”display_name” name=”displayName”/>
</class>
</hibernate-mapping>
Vervolgens gaan we de applicatie runnen. In de debugoutput verschijnt het volgende:
Reading mappings from resource :
/application/crud/hibernate/User.hbm.xml
Mapping class: application.crud.hibernate.User -> users
Met daarna de volgende stacktrace:
JSF1001: Managedbean registerManager could not be created.
WebModule[/application]javax.el.ELException: javax.faces.FacesException: javax.faces.FacesException: Cant instantiate class: mandaatkracht.crud.hibernate.CrudManager.. users is not mapped [select u.username from users as u]
Caused by: org.hibernate.hql.ast.QuerySyntaxException: users is not mapped [select u.username from users as u]
De aanroepende code was als volgt:
session.createQuery(“select u.username from ” +
“users u”).list();
Je zou verwachten dat users is gemapt. Na wat speurwerk en proberen kwam ik erachter dat je moet verwijzen naar de klasse (User) en diens attributen en niet naar de tabel. Dus mocht je ooit tegen dit soort problemen aan lopen denk er aan dat je dan de klasse gebruikt en niet de tabelnaam:
session.createQuery(“select u.userName from ” +
“User u”).list();
Leave a Reply