-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Annotated named queries in non-persistent classes?
PostPosted: Mon Oct 01, 2007 7:21 pm 
Newbie

Joined: Mon Oct 01, 2007 6:49 pm
Posts: 1
I am currently working on a prototype of a Spring/Hibernate replacement for our existing EJB2 tier. The basis for our approach has been the "Don't Repeat the DAO" article by Per Mellqvist located at:
http://www.ibm.com/developerworks/java/ ... icdao.html

One departure from this article has been the use of annotations to have the annotated named queries in the persistent beans. I suppose that this ok, however, my DAO interfaces often just contain finder methods that mirror the NamedQueries located in the persistent beans. Like so..

__Bean class________

@NamedQueries({
@NamedQuery(name="Subscription.findByFeatureKeyword",
query="from Subscription s where s.name like :keyword"),
@NamedQuery(name="Subscription.findByActive",
query="from Subscription s where s.active = ?")
})

@Entity
@Table(name="subscriptions")
public class Subscription
implements Serializable {

//etc....

__DAO Interface_____

public interface SubscriptionDao extends GenericDao <Subscription, Long> {

public List findByFeatureKeyword( String keyword);
public List findByActive(boolean active );

}


It would make more sense to me that the named query annotations be located in the interface along side the corresponding method declarations.

However, when I try to move the queries to the DAO and add the DAO to the hibernate.cfg, like so...

<mapping class="com.XXX.subscription.dao.SubscriptionDao"/>


(I realize the hacky-ness of this approach)

The class is not bound on start-up and when I try to use the query I get this exception..

[2007-10-01 16:12:37]org.hibernate.MappingException: Named query not known: Subscription.findByFeatureKeyword
[2007-10-01 16:12:37] at org.hibernate.impl.AbstractSessionImpl.getNamedQuery(AbstractSessionImpl.java:70)
[2007-10-01 16:12:37] at org.hibernate.impl.SessionImpl.getNamedQuery(SessionImpl.java:1260)
[2007-10-01 16:12:37] at com.XXX.core.dao.genericdao.GenericDaoHibernateImpl.prepareQuery(GenericDaoHibernateImpl.java:103)
[2007-10-01 16:12:37] at com.XXX.core.dao.genericdao.GenericDaoHibernateImpl.executeFinder(GenericDaoHibernateImpl.java:84)
[2007-10-01 16:12:37] at com.XXX.core.dao.genericdao.finder.impl.FinderIntroductionInterceptor.invoke(FinderIntroductionInterceptor.java:25)
[2007-10-01 16:12:37] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
[2007-10-01 16:12:37] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
[2007-10-01 16:12:37] at $Proxy23.findByFeatureKeyword(Unknown Source)
[2007-10-01 16:12:37] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[2007-10-01 16:12:37] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[2007-10-01 16:12:37] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[2007-10-01 16:12:37] at java.lang.reflect.Method.invoke(Method.java:597)
[2007-10-01 16:12:37] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301)
[2007-10-01 16:12:37] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:177)
[2007-10-01 16:12:37] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
[2007-10-01 16:12:37] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
[2007-10-01 16:12:37] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
[2007-10-01 16:12:37] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
[2007-10-01 16:12:37] at $Proxy24.findByFeatureKeyword(Unknown Source)
[2007-10-01 16:12:37] at com.XXX.opal.service.OpalInfoSvcImpl.populateWithDownloadOpalInfo(OpalInfoSvcImpl.java:69)
[2007-10-01 16:12:37] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[2007-10-01 16:12:37] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[2007-10-01 16:12:37] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[2007-10-01 16:12:37] at java.lang.reflect.Method.invoke(Method.java:597)
[2007-10-01 16:12:37] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301)
[2007-10-01 16:12:37] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:177)
[2007-10-01 16:12:37] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
[2007-10-01 16:12:37] at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:126)
[2007-10-01 16:12:37] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
[2007-10-01 16:12:37] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
[2007-10-01 16:12:37] at $Proxy25.populateWithDownloadOpalInfo(Unknown Source)
[2007-10-01 16:12:37] at com.nextgame.struts.action.OpalLoginAction.execute(OpalLoginAction.java:250)
[2007-10-01 16:12:37] at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
[2007-10-01 16:12:37] at com.nextgame.struts.requestprocessor.PleaseWaitRequestProcessor.processActionPerform(PleaseWaitRequestProcessor.java:107)
[2007-10-01 16:12:37] at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
[2007-10-01 16:12:37] at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
[2007-10-01 16:12:37] at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
[2007-10-01 16:12:37] at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
[2007-10-01 16:12:37] at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
[2007-10-01 16:12:37] at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
[2007-10-01 16:12:37] at com.nextgame.filter.HibernateFilter.doFilter(HibernateFilter.java:27)
[2007-10-01 16:12:37] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:37] at com.nextgame.filter.CacheHeaderFilter.doFilter(CacheHeaderFilter.java:83)
[2007-10-01 16:12:37] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:37] at com.nextgame.filter.CacheHeaderFilter.doFilter(CacheHeaderFilter.java:83)
[2007-10-01 16:12:37] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:37] at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:350)
[2007-10-01 16:12:37] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:37] at com.nextgame.filter.SecureFilter.doFilter(SecureFilter.java:51)
[2007-10-01 16:12:37] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:37] at com.nextgame.filter.LicenseeFilter.doFilter(LicenseeFilter.java:169)
[2007-10-01 16:12:37] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:37] at com.nextgame.filter.P3PFilter.doFilter(P3PFilter.java:39)
[2007-10-01 16:12:37] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:37] at com.nextgame.filter.ArcadeFilter.doFilter(ArcadeFilter.java:162)
[2007-10-01 16:12:37] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:37] at com.XXX.burrito.BurritoFilter.doFilter(BurritoFilter.java:116)
[2007-10-01 16:12:37] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:37] at com.caucho.server.http.Invocation.service(Invocation.java:315)
[2007-10-01 16:12:37] at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
[2007-10-01 16:12:37] at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:253)
[2007-10-01 16:12:37] at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:170)
[2007-10-01 16:12:37] at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
[2007-10-01 16:12:37] at java.lang.Thread.run(Thread.java:619)
[2007-10-01 16:12:38]com.XXX.core.service.exception.ServiceException: org.hibernate.MappingException: Named query not known: Subscription.findByFeatureKeyword
[2007-10-01 16:12:38] at com.XXX.core.spring.aop.XXXServiceMethodThrowsAdvice.afterThrowing(XXXServiceMethodThrowsAdvice.java:23)
[2007-10-01 16:12:38] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[2007-10-01 16:12:38] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[2007-10-01 16:12:38] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[2007-10-01 16:12:38] at java.lang.reflect.Method.invoke(Method.java:597)
[2007-10-01 16:12:38] at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invokeHandlerMethod(ThrowsAdviceInterceptor.java:146)
[2007-10-01 16:12:38] at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:131)
[2007-10-01 16:12:38] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
[2007-10-01 16:12:38] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
[2007-10-01 16:12:38] at $Proxy25.populateWithDownloadOpalInfo(Unknown Source)
[2007-10-01 16:12:38] at com.nextgame.struts.action.OpalLoginAction.execute(OpalLoginAction.java:250)
[2007-10-01 16:12:38] at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
[2007-10-01 16:12:38] at com.nextgame.struts.requestprocessor.PleaseWaitRequestProcessor.processActionPerform(PleaseWaitRequestProcessor.java:107)
[2007-10-01 16:12:38] at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
[2007-10-01 16:12:38] at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
[2007-10-01 16:12:38] at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
[2007-10-01 16:12:38] at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
[2007-10-01 16:12:38] at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
[2007-10-01 16:12:38] at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
[2007-10-01 16:12:38] at com.nextgame.filter.HibernateFilter.doFilter(HibernateFilter.java:27)
[2007-10-01 16:12:38] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:38] at com.nextgame.filter.CacheHeaderFilter.doFilter(CacheHeaderFilter.java:83)
[2007-10-01 16:12:38] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:38] at com.nextgame.filter.CacheHeaderFilter.doFilter(CacheHeaderFilter.java:83)
[2007-10-01 16:12:38] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:38] at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:350)
[2007-10-01 16:12:38] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:38] at com.nextgame.filter.SecureFilter.doFilter(SecureFilter.java:51)
[2007-10-01 16:12:38] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:38] at com.nextgame.filter.LicenseeFilter.doFilter(LicenseeFilter.java:169)
[2007-10-01 16:12:38] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:38] at com.nextgame.filter.P3PFilter.doFilter(P3PFilter.java:39)
[2007-10-01 16:12:38] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:38] at com.nextgame.filter.ArcadeFilter.doFilter(ArcadeFilter.java:162)
[2007-10-01 16:12:38] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:38] at com.XXX.burrito.BurritoFilter.doFilter(BurritoFilter.java:116)
[2007-10-01 16:12:38] at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
[2007-10-01 16:12:38] at com.caucho.server.http.Invocation.service(Invocation.java:315)
[2007-10-01 16:12:38] at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
[2007-10-01 16:12:38] at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:253)
[2007-10-01 16:12:38] at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:170)
[2007-10-01 16:12:38] at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
[2007-10-01 16:12:38] at java.lang.Thread.run(Thread.java:619)
[2007-10-01 16:12:38]Caused by: org.hibernate.MappingException: Named query not known: Subscription.findByFeatureKeyword
[2007-10-01 16:12:38] at org.hibernate.impl.AbstractSessionImpl.getNamedQuery(AbstractSessionImpl.java:70)
[2007-10-01 16:12:38] at org.hibernate.impl.SessionImpl.getNamedQuery(SessionImpl.java:1260)
[2007-10-01 16:12:38] at com.XXX.core.dao.genericdao.GenericDaoHibernateImpl.prepareQuery(GenericDaoHibernateImpl.java:103)
[2007-10-01 16:12:38] at com.XXX.core.dao.genericdao.GenericDaoHibernateImpl.executeFinder(GenericDaoHibernateImpl.java:84)
[2007-10-01 16:12:38] at com.XXX.core.dao.genericdao.finder.impl.FinderIntroductionInterceptor.invoke(FinderIntroductionInterceptor.java:25)
[2007-10-01 16:12:38] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
[2007-10-01 16:12:38] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
[2007-10-01 16:12:38] at $Proxy23.findByFeatureKeyword(Unknown Source)
[2007-10-01 16:12:38] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[2007-10-01 16:12:38] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[2007-10-01 16:12:38] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[2007-10-01 16:12:38] at java.lang.reflect.Method.invoke(Method.java:597)
[2007-10-01 16:12:38] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301)
[2007-10-01 16:12:38] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:177)
[2007-10-01 16:12:38] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
[2007-10-01 16:12:38] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
[2007-10-01 16:12:38] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
[2007-10-01 16:12:38] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
[2007-10-01 16:12:38] at $Proxy24.findByFeatureKeyword(Unknown Source)
[2007-10-01 16:12:38] at com.XXX.opal.service.OpalInfoSvcImpl.populateWithDownloadOpalInfo(OpalInfoSvcImpl.java:69)
[2007-10-01 16:12:38] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[2007-10-01 16:12:38] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[2007-10-01 16:12:38] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[2007-10-01 16:12:38] at java.lang.reflect.Method.invoke(Method.java:597)
[2007-10-01 16:12:38] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301)
[2007-10-01 16:12:38] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:177)
[2007-10-01 16:12:38] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
[2007-10-01 16:12:38] at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:126)
[2007-10-01 16:12:38] ... 36 more


Has anyone successfully done this? Every example I have found online of using annotated named queries places them in the persistent bean. Anyone have any ideas? This is obviously not mission critical, but it would be nice.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Oct 02, 2007 1:03 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
I don't like that, it defeats the entity autodiscovery mechanism of Java Persistence

_________________
Emmanuel


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.