From: Igor A T. (JIRA) <no...@at...> - 2006-06-21 00:16:34
|
[ http://opensource.atlassian.com/projects/hibernate/browse/EJB-133?page=comments#action_23364 ] Igor A Tarasov commented on EJB-133: ------------------------------------ To: Andrew C. Oliver It is not necessary to argue with developers. if you think, that they are using this code in real big projects, you miss :-) It is better to write wrapper for itself than to wait while developers will understand that it inconveniently ;p) Try this: public static final <T> T query_getSingleResult(Query query, Class<T> clazz) { try { return (T)query.getSingleResult(); } catch (NoResultException ex) { return null; } } or this: public static final <T> T query_getSingleResult(Query query, Class<T> clazz) throws NotRuntimeException { try { return (T)query.getSingleResult(); } catch (NoResultException ex) { throw new NotRuntimeException(ex); } } > getSingleResult throws bogus javax.persistence.NoResultException > ---------------------------------------------------------------- > > Key: EJB-133 > URL: http://opensource.atlassian.com/projects/hibernate/browse/EJB-133 > Project: Hibernate Entity Manager > Type: Bug > Versions: 3.1.0.Beta8 > Reporter: Andrew C. Oliver > > > http://jira.jboss.com/jira/browse/EJBTHREE-451 - originally opened as (but is clearly a Hibernate issue) - > This is the code: > /* > * (non-Javadoc) > * > * @see org.jboss.mail.mailbox.MailboxService#getMailboxByAlias(java.lang.String) > */ > @Tx(TxType.REQUIRED) > public Mailbox getMailboxByAlias(String alias) { > emInit(); > String query = "from Mailbox as mbox join fetch mbox.defaultInFolder where mbox.aliases.name=:alias"; > return (Mailbox) session.createQuery(query) > .setParameter("alias", alias).getSingleResult(); > } > It results in this query: > select mailbox0_.id as id4_0_, folder1_.id as id4_1_, mailbox0_.parent_id as parent4_4_0_, mailbox0_.name as name4_0_, mailbox0_.defaultOutFolder_id as defaultO5_4_0_, mailbox0_.defaultInFolder_id as defaultI6_4_0_, folder1_.parent_id as parent4_4_1_, folder1_.name as name4_1_, folder1_.defaultOutFolder_id as defaultO5_4_1_, folder1_.defaultInFolder_id as defaultI6_4_1_, folder1_.TYPE as TYPE4_1_ from Folder mailbox0_ inner join Folder folder1_ on mailbox0_.defaultInFolder_id=folder1_.id, Alias aliases2_ where mailbox0_.TYPE='org.jboss.mail.mailbox.Mailbox' and mailbox0_.id=aliases2_.FOLDER_ID and aliases2_.name= ?; > When the above query is run from the console with the value replacing the ?, a result is returned. The aliases and mailboxes were precreated. However this exception is returned: > Caused by: javax.persistence.NoResultException: No entity found for query > at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:47) > at org.jboss.mail.store.AbstractStore.org$jboss$mail$store$AbstractStore$loadMetaData$aop(AbstractStore.java:181) > at org.jboss.mail.store.AbstractStore$loadMetaData_N999927503220138265.invokeNext()Ljava.lang.Object;(AbstractStore$loadMetaData_N999927503220138265.java:???) > at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126) > at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:196) > at org.jboss.mail.store.AbstractStore$loadMetaData_N999927503220138265.invokeNext()Ljava.lang.Object;(AbstractStore$loadMetaData_N999927503220138265.java:???) > at org.jboss.mail.store.AbstractStore.loadMetaData(Ljava.lang.Long;)Lorg.jboss.mail.store.StoreItemMetaData;(AbstractStore.java:???) > at org.jboss.mail.store.AbstractStore.org$jboss$mail$store$AbstractStore$getStoreItem$aop(AbstractStore.java:87) > at org.jboss.mail.store.AbstractStore$getStoreItem_N5079312968078757045.invokeNext()Ljava.lang.Object;(AbstractStore$getStoreItem_N5079312968078757045.java:???) > at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126) > at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:196) > at org.jboss.mail.store.AbstractStore$getStoreItem_N5079312968078757045.invokeNext()Ljava.lang.Object;(AbstractStore$getStoreItem_N5079312968078757045.java:???) > at org.jboss.mail.store.AbstractStore.getStoreItem(Ljava.lang.Long;)Lorg.jboss.mail.store.StoreItem;(AbstractStore.java:???) > at jrockit.reflect.VirtualNativeMethodInvoker.invoke(Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown Source) > at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:87) > at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:638) > at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:201) > at $Proxy103.getStoreItem(Ljava.lang.Long;)Lorg.jboss.mail.store.StoreItem;(Unknown Source) > at org.jboss.mail.message.StoredMailBody.getItem(StoredMailBody.java:105) > at org.jboss.mail.message.StoredMailBody.getSize(StoredMailBody.java:172) > at org.jboss.mail.mailbox.MessageData.<init>(MessageData.java:119) > at org.jboss.mail.mailhandler.localmailbox.LocalDelivery.org$jboss$mail$mailhandler$localmailbox$LocalDelivery$deliver$aop(LocalDelivery.java:101) > at org.jboss.mail.mailhandler.localmailbox.LocalDelivery.access$1(Lorg.jboss.mail.mailhandler.localmailbox.LocalDelivery;Lorg.jboss.mail.mailbox.MailboxService;Lorg.jboss.mail.message.MailAddress;Lorg.jboss.mail.message.Mail;)S(LocalDelivery.java:???) > at org.jboss.mail.mailhandler.localmailbox.LocalDelivery$deliver_7597238674321613949.invokeNext()Ljava.lang.Object;(LocalDelivery$deliver_7597238674321613949.java:???) > at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79) > at org.jboss.aspects.tx.TxInterceptor$RequiresNew.invoke(TxInterceptor.java:253) > at org.jboss.mail.mailhandler.localmailbox.LocalDelivery$deliver_7597238674321613949.invokeNext()Ljava.lang.Object;(LocalDelivery$deliver_7597238674321613949.java:???) > at org.jboss.mail.mailhandler.localmailbox.LocalDelivery.deliver(Lorg.jboss.mail.mailbox.MailboxService;Lorg.jboss.mail.message.MailAddress;Lorg.jboss.mail.message.Mail;)S(LocalDelivery.java:???) > at org.jboss.mail.mailhandler.localmailbox.LocalDelivery.send(LocalDelivery.java:43) > at jrockit.reflect.VirtualNativeMethodInvoker.invoke(Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown Source) > You can find a log demonstrating this on dev09 in /services/specmail directory. it isn't a small log file because debugging was turned up all the way :-) So eric will be bugging me to delete it before long. > Under load when connections timeout this exception is thrown. I suspect that deep down it is a broken socket or similar based SQL exception, but the result is actually threre. The number of them go up as load increases. This has been replicated under Postgresql and Mysql. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |