Author: epbernard
Date: 2008-02-29 12:14:51 -0500 (Fri, 29 Feb 2008)
New Revision: 14382
Modified:
entitymanager/trunk/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java
entitymanager/trunk/src/test/org/hibernate/ejb/test/QueryTest.java
Log:
EJB-341 Wrong named queries should not raise a PersistenceException
Modified: entitymanager/trunk/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java
===================================================================
---
entitymanager/trunk/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2008-02-28
19:42:08 UTC (rev 14381)
+++
entitymanager/trunk/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2008-02-29
17:14:51 UTC (rev 14382)
@@ -100,9 +100,16 @@
public Query createNamedQuery(String name) {
//adjustFlushMode();
+ org.hibernate.Query namedQuery;
try {
- return new QueryImpl( getSession().getNamedQuery( name ), this );
+ namedQuery = getSession().getNamedQuery( name );
}
+ catch (MappingException e) {
+ throw new IllegalArgumentException("Named query not found: " + name);
+ }
+ try {
+ return new QueryImpl( namedQuery, this );
+ }
catch (HibernateException he) {
throwPersistenceException( he );
return null;
Modified: entitymanager/trunk/src/test/org/hibernate/ejb/test/QueryTest.java
===================================================================
--- entitymanager/trunk/src/test/org/hibernate/ejb/test/QueryTest.java 2008-02-28 19:42:08
UTC (rev 14381)
+++ entitymanager/trunk/src/test/org/hibernate/ejb/test/QueryTest.java 2008-02-29 17:14:51
UTC (rev 14382)
@@ -346,6 +346,30 @@
}
+ public void testUnavailableNamedQuery() throws Exception {
+ Item item = new Item( "Mouse", "Micro$oft mouse" );
+
+ EntityManager em = factory.createEntityManager();
+ em.getTransaction().begin();
+ em.persist( item );
+ try {
+ em.createNamedQuery( "wrong name" );
+ fail("Wrong named query should raise an exception");
+ }
+ catch (IllegalArgumentException e) {
+ //success
+ }
+ em.getTransaction().commit();
+
+ em.clear();
+
+ em.getTransaction().begin();
+ em.remove( em.find( Item.class, item.getName() ) );
+ em.getTransaction().commit();
+ em.close();
+
+ }
+
public Class[] getAnnotatedClasses() {
return new Class[]{
Item.class,
Show replies by thread