1
16 package org.springframework.data.jpa.repository.support;
17
18 import javax.persistence.EntityManager;
19 import javax.persistence.PersistenceContext;
20
21 import org.springframework.beans.factory.ObjectProvider;
22 import org.springframework.beans.factory.annotation.Autowired;
23 import org.springframework.data.jpa.repository.query.EscapeCharacter;
24 import org.springframework.data.jpa.repository.query.JpaQueryMethodFactory;
25 import org.springframework.data.mapping.context.MappingContext;
26 import org.springframework.data.querydsl.EntityPathResolver;
27 import org.springframework.data.querydsl.SimpleEntityPathResolver;
28 import org.springframework.data.repository.Repository;
29 import org.springframework.data.repository.core.support.RepositoryFactorySupport;
30 import org.springframework.data.repository.core.support.TransactionalRepositoryFactoryBeanSupport;
31 import org.springframework.lang.Nullable;
32 import org.springframework.util.Assert;
33
34
45 public class JpaRepositoryFactoryBean<T extends Repository<S, ID>, S, ID>
46 extends TransactionalRepositoryFactoryBeanSupport<T, S, ID> {
47
48 private @Nullable EntityManager entityManager;
49 private EntityPathResolver entityPathResolver;
50 private EscapeCharacter escapeCharacter = EscapeCharacter.DEFAULT;
51 private JpaQueryMethodFactory queryMethodFactory;
52
53
58 public JpaRepositoryFactoryBean(Class<? extends T> repositoryInterface) {
59 super(repositoryInterface);
60 }
61
62
67 @PersistenceContext
68 public void setEntityManager(EntityManager entityManager) {
69 this.entityManager = entityManager;
70 }
71
72
76 @Override
77 public void setMappingContext(MappingContext<?, ?> mappingContext) {
78 super.setMappingContext(mappingContext);
79 }
80
81
87 @Autowired
88 public void setEntityPathResolver(ObjectProvider<EntityPathResolver> resolver) {
89 this.entityPathResolver = resolver.getIfAvailable(() -> SimpleEntityPathResolver.INSTANCE);
90 }
91
92
99 @Autowired
100 public void setQueryMethodFactory(@Nullable JpaQueryMethodFactory factory) {
101
102 if (factory != null) {
103 this.queryMethodFactory = factory;
104 }
105 }
106
107
111 @Override
112 protected RepositoryFactorySupport doCreateRepositoryFactory() {
113
114 Assert.state(entityManager != null, "EntityManager must not be null!");
115
116 return createRepositoryFactory(entityManager);
117 }
118
119
122 protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
123
124 JpaRepositoryFactory jpaRepositoryFactory = new JpaRepositoryFactory(entityManager);
125 jpaRepositoryFactory.setEntityPathResolver(entityPathResolver);
126 jpaRepositoryFactory.setEscapeCharacter(escapeCharacter);
127
128 if (queryMethodFactory != null) {
129 jpaRepositoryFactory.setQueryMethodFactory(queryMethodFactory);
130 }
131
132 return jpaRepositoryFactory;
133 }
134
135
139 @Override
140 public void afterPropertiesSet() {
141
142 Assert.state(entityManager != null, "EntityManager must not be null!");
143
144 super.afterPropertiesSet();
145 }
146
147 public void setEscapeCharacter(char escapeCharacter) {
148
149 this.escapeCharacter = EscapeCharacter.of(escapeCharacter);
150 }
151 }
152