All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.crnk.spring.boot.autoconfigure.CrnkJpaAutoConfiguration Maven / Gradle / Ivy

package io.crnk.spring.boot.autoconfigure;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;

import io.crnk.jpa.JpaModule;
import io.crnk.jpa.JpaModuleConfig;
import io.crnk.jpa.query.criteria.JpaCriteriaQueryFactory;
import io.crnk.jpa.query.querydsl.QuerydslQueryFactory;
import io.crnk.spring.boot.CrnkJpaProperties;
import io.crnk.spring.boot.CrnkSpringBootProperties;
import io.crnk.spring.boot.JpaModuleConfigurer;
import io.crnk.spring.boot.v3.CrnkConfigV3;
import io.crnk.spring.jpa.SpringTransactionRunner;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

/**
 * @link EnableAutoConfiguration Auto-configuration} for Crnk' JPA module.
 * 

* Activates when there is a bean of type {@link javax.persistence.EntityManagerFactory} and * {@link javax.persistence.EntityManager} on the classpath and there is no other existing * {@link io.crnk.jpa.JpaModule} configured. *

* Disable with the property crnk.jpa.enabled = false. By default all entities are exposed. *

* This configuration class will activate after the Hibernate auto-configuration. */ @Configuration @ConditionalOnProperty(prefix = "crnk.jpa", name = "enabled", havingValue = "true", matchIfMissing = true) @ConditionalOnClass(JpaModule.class) @ConditionalOnMissingBean(JpaModule.class) @EnableConfigurationProperties({ CrnkJpaProperties.class, CrnkSpringBootProperties.class }) @AutoConfigureAfter(HibernateJpaAutoConfiguration.class) @AutoConfigureBefore @Import({ CrnkConfigV3.class }) public class CrnkJpaAutoConfiguration { @PersistenceContext private EntityManager em; @Autowired private EntityManagerFactory emf; @Autowired private CrnkJpaProperties jpaProperties; @Autowired(required = false) private List configurers; @Bean @ConditionalOnMissingBean public SpringTransactionRunner transactionRunner() { return new SpringTransactionRunner(); } @Bean @ConditionalOnMissingBean public JpaModuleConfig jpaModuleConfig() { return new JpaModuleConfig(); } @Bean @ConditionalOnMissingBean public JpaModule jpaModule(JpaModuleConfig config) { if (configurers != null) { for (JpaModuleConfigurer configurer : configurers) { configurer.configure(config); } } if (jpaProperties.getExposeAll()) { config.exposeAllEntities(emf); } JpaModule module = JpaModule.createServerModule(config, em, transactionRunner()); if (jpaProperties.getQueryFactory() != null) { switch (jpaProperties.getQueryFactory()) { case CRITERIA: module.setQueryFactory(JpaCriteriaQueryFactory.newInstance()); break; case QUERYDSL: module.setQueryFactory(QuerydslQueryFactory.newInstance()); break; default: throw new IllegalStateException("unknown query factory"); } } return module; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy