1 // $Id: FullTextEntityManagerImpl.java 14845 2008-07-03 12:41:06Z hardy.ferentschik $
2 package org.hibernate.search.jpa.impl;
3
4 import java.io.Serializable;
5 import javax.persistence.EntityManager;
6 import javax.persistence.FlushModeType;
7 import javax.persistence.LockModeType;
8 import javax.persistence.Query;
9 import javax.persistence.EntityTransaction;
10
11 import org.hibernate.search.jpa.FullTextEntityManager;
12 import org.hibernate.search.jpa.FullTextQuery;
13 import org.hibernate.search.SearchFactory;
14 import org.hibernate.search.SearchException;
15 import org.hibernate.search.FullTextSession;
16 import org.hibernate.search.Search;
17 import org.hibernate.Session;
18
19 /**
20 * @author Emmanuel Bernard
21 */
22 public class FullTextEntityManagerImpl implements FullTextEntityManager, Serializable {
23 private final EntityManager em;
24 private FullTextSession ftSession;
25
26 public FullTextEntityManagerImpl(EntityManager em) {
27 this.em = em;
28 }
29
30 private FullTextSession getFullTextSession() {
31 if ( ftSession == null ) {
32 Object delegate = em.getDelegate();
33 if ( delegate == null ) {
34 throw new SearchException("Trying to use Hibernate Search without an Hibernate EntityManager (no delegate)");
35 }
36 else if ( Session.class.isAssignableFrom( delegate.getClass() ) ) {
37 ftSession = Search.getFullTextSession( (Session) delegate );
38 }
39 else if ( EntityManager.class.isAssignableFrom( delegate.getClass() ) ) {
40 //Some app servers wrap the EM twice
41 delegate = ( (EntityManager) delegate).getDelegate();
42 if ( delegate == null ) {
43 throw new SearchException("Trying to use Hibernate Search without an Hibernate EntityManager (no delegate)");
44 }
45 else if ( Session.class.isAssignableFrom( delegate.getClass() ) ) {
46 ftSession = Search.getFullTextSession( (Session) delegate );
47 }
48 else {
49 throw new SearchException("Trying to use Hibernate Search without an Hibernate EntityManager: " + delegate.getClass() );
50 }
51 }
52 else {
53 throw new SearchException("Trying to use Hibernate Search without an Hibernate EntityManager: " + delegate.getClass() );
54 }
55 }
56 return ftSession;
57 }
58
59 public FullTextQuery createFullTextQuery(org.apache.lucene.search.Query luceneQuery, Class... entities) {
60 FullTextSession ftSession = getFullTextSession();
61 return new FullTextQueryImpl( ftSession.createFullTextQuery( luceneQuery, entities ), ftSession );
62 }
63
64 public void index(Object entity) {
65 getFullTextSession().index( entity );
66 }
67
68 public SearchFactory getSearchFactory() {
69 return getFullTextSession().getSearchFactory();
70 }
71
72 public void purge(Class entityType, Serializable id) {
73 getFullTextSession().purge( entityType, id );
74 }
75
76 public void purgeAll(Class entityType) {
77 getFullTextSession().purgeAll( entityType );
78 }
79
80 public void flushToIndexes() {
81 getFullTextSession().flushToIndexes();
82 }
83
84
85 public void persist(Object entity) {
86 em.persist( entity );
87 }
88
89 public <T> T merge(T entity) {
90 return em.merge( entity );
91 }
92
93 public void remove(Object entity) {
94 em.remove( entity );
95 }
96
97 public <T> T find(Class<T> entityClass, Object primaryKey) {
98 return em.find( entityClass, primaryKey );
99 }
100
101 public <T> T getReference(Class<T> entityClass, Object primaryKey) {
102 return em.getReference( entityClass, primaryKey );
103 }
104
105 public void flush() {
106 em.flush();
107 }
108
109 public void setFlushMode(FlushModeType flushMode) {
110 em.setFlushMode( flushMode );
111 }
112
113 public FlushModeType getFlushMode() {
114 return em.getFlushMode();
115 }
116
117 public void lock(Object entity, LockModeType lockMode) {
118 em.lock( entity, lockMode );
119 }
120
121 public void refresh(Object entity) {
122 em.refresh( entity );
123 }
124
125 public void clear() {
126 em.clear();
127 }
128
129 public boolean contains(Object entity) {
130 return em.contains( entity );
131 }
132
133 public Query createQuery(String ejbqlString) {
134 return em.createQuery( ejbqlString );
135 }
136
137 public Query createNamedQuery(String name) {
138 return em.createNamedQuery( name );
139 }
140
141 public Query createNativeQuery(String sqlString) {
142 return em.createNativeQuery( sqlString );
143 }
144
145 public Query createNativeQuery(String sqlString, Class resultClass) {
146 return em.createNativeQuery( sqlString, resultClass );
147 }
148
149 public Query createNativeQuery(String sqlString, String resultSetMapping) {
150 return em.createNativeQuery( sqlString, resultSetMapping );
151 }
152
153 public void joinTransaction() {
154 em.joinTransaction();
155 }
156
157 public Object getDelegate() {
158 return em.getDelegate();
159 }
160
161 public void close() {
162 em.close();
163 }
164
165 public boolean isOpen() {
166 return em.isOpen();
167 }
168
169 public EntityTransaction getTransaction() {
170 return em.getTransaction();
171 }
172 }