1
//$Id: NamedQueryLoader.java 10019 2006-06-15 07:50:12Z steve.ebersole@jboss.com $
2
package org.hibernate.persister.entity;
4
import java.io.Serializable;
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8
import org.hibernate.FlushMode;
9
import org.hibernate.HibernateException;
10
import org.hibernate.engine.EntityKey;
11
import org.hibernate.engine.SessionImplementor;
12
import org.hibernate.impl.AbstractQueryImpl;
13
import org.hibernate.loader.entity.UniqueEntityLoader;
16
* Not really a <tt>Loader</tt>, just a wrapper around a
20
public final class NamedQueryLoader implements UniqueEntityLoader {
21
private final String queryName;
22
private final EntityPersister persister;
24
private static final Log log = LogFactory.getLog(NamedQueryLoader.class);
26
public NamedQueryLoader(String queryName, EntityPersister persister) {
28
this.queryName = queryName;
29
this.persister = persister;
32
public Object load(Serializable id, Object optionalObject, SessionImplementor session)
33
throws HibernateException {
35
if ( log.isDebugEnabled() ) {
37
"loading entity: " + persister.getEntityName() +
38
" using named query: " + queryName
42
AbstractQueryImpl query = (AbstractQueryImpl) session.getNamedQuery(queryName);
43
if ( query.hasNamedParameters() ) {
45
query.getNamedParameters()[0],
47
persister.getIdentifierType()
51
query.setParameter( 0, id, persister.getIdentifierType() );
53
query.setOptionalId(id);
54
query.setOptionalEntityName( persister.getEntityName() );
55
query.setOptionalObject(optionalObject);
56
query.setFlushMode( FlushMode.MANUAL );
59
// now look up the object we are really interested in!
60
// (this lets us correctly handle proxies and multi-row
61
// or multi-column queries)
62
return session.getPersistenceContext()
63
.getEntity( new EntityKey( id, persister, session.getEntityMode() ) );
b'\\ No newline at end of file'