如何解决春季+冬眠
我在Centos上与VM一起完成了一个项目。我正在尝试将其移植到Windows10。它除了更新数据库外还可以工作。我将对设置和类进行布局,您能告诉我如此不同的工作可能是什么问题吗?到基础的连接是相同的:在所有情况下,我都连接到VM上的基础。
在Windows中调用合并的错误:
javax.persistence.TransactionRequiredException:没有具有实际事务的EntityManager可用于当前线程-无法可靠地处理“合并”调用 org.springframework.orm.jpa.SharedEntityManagerCreator $ SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:282) com.sun.proxy。$ Proxy243.merge(未知来源) com.noteanalyzer.dao.GenericDaoImpl.update(GenericDaoImpl.java:59) com.noteanalyzer.mvc.service.impl.UserServiceImpl.updateUnsuccessfullAttempt(UserServiceImpl.java:380) com.noteanalyzer.security.security.auth.ajax.AjaxAuthenticationProvider.authenticate(AjaxAuthenticationProvider.java:58) org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:174) org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199) org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter $ AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:469) com.noteanalyzer.security.security.auth.ajax.AjaxLoginProcessingFilter.attemptAuthentication(AjaxLoginProcessingFilter.java:61) org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331) org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331) org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331) org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331) org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331) org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
很抱歉,但是我找不到类似的答案-因为该项目在Linux上正常运行,但仅在Windows下会出现这种错误(
Apache Tomcat / 8.5.57ВерсияJVM 1.8.0_151-b12
GenericDao.java
@Transactional
public interface GenericDao {
<E extends AbstractEntity> E create(final E model);
<E extends AbstractEntity> E update(final E model);
<E extends AbstractEntity> void delete(final E model);
<E extends AbstractEntity> E getById(final Class<E> modelClass,final Serializable id);
<E extends AbstractEntity> void deleteById(final Class<E> modelClass,final Serializable id);
<E extends AbstractEntity> List<E> getAll(final Class<E> model);
<E extends AbstractEntity> List<E> getResultByNativeQuery(final String queryName,Map<String,Object> parameters,String name);
List<Object> getResultByNativeQuery(final String queryName,Object> parameters);
<E extends AbstractEntity> List<E> getResultByNativeQuery(final String queryName,Class<E> objectType);
public <E extends AbstractEntity> List < Map < String,Object >> getNativeQueryResultInMap(String queryName,Class<E> objectType);
<E extends AbstractEntity> void executeNativeQuery(final String queryName,Object> parameters);
/**
* Update using named query
* @param queryName
* @param parameters
* @return
*/
int updateByNamedQuery(String queryName,Object> parameters);
<E extends AbstractEntity> List<E> getResultByNamedQuery(Class<E> objectType,String queryName,Object> parameters);
public CriteriaQuery createCriteria(Class<?> clazz);
public <E extends AbstractEntity> Map<String,Object> callNamedStoredProcedure(String callerName,Object> outputParameters);
void executeUpdate(final String queryName,Object> parameters);
}
GenericDaoImpl.java
@Repository("genericDao")
@Transactional
public class GenericDaoImpl implements GenericDao {
@Autowired
protected SessionFactory sessionFactory;
@PersistenceContext
private EntityManager entityManager;
public EntityManager getEntityManager() {
return entityManager;
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Override
public <E extends AbstractEntity> E create(E model) {
entityManager.persist(model);
return model;
}
@Override
public <E extends AbstractEntity> E update(E model) {
model = entityManager.merge(model);
entityManager.flush();
return model;
}
@Override
public <E extends AbstractEntity> void delete(E model) {
entityManager.remove(model);
}
@Override
public <E extends AbstractEntity> E getById(Class<E> modelClass,Serializable id) {
return entityManager.find(modelClass,id);
}
@Override
public <E extends AbstractEntity> void deleteById(Class<E> modelClass,Serializable id) {
final E entity = getById(modelClass,id);
entityManager.remove(entity);
}
@Override
public <E extends AbstractEntity> List<E> getAll(Class<E> model) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<E> criteriaQuery = criteriaBuilder.createQuery(model);
criteriaQuery.from(model);
return entityManager.createQuery(criteriaQuery).getResultList();
}
public <E extends AbstractEntity> Map<String,Object> outputParameters){
StoredProcedureQuery storedProcedure = entityManager.createNamedStoredProcedureQuery(callerName);
if(parameters != null) {
for(final Entry<String,Object> parameter : parameters.entrySet()) {
storedProcedure.setParameter(parameter.getKey(),parameter.getValue());
}
}
storedProcedure.execute();
if(outputParameters != null) {
for(final Entry<String,Object> parameter : outputParameters.entrySet()) {
outputParameters.put(parameter.getKey(),storedProcedure.getOutputParameterValue(parameter.getKey()));
}
}
return outputParameters;
}
@Override
public int updateByNamedQuery(String queryName,Object> parameters) {
final Query query = entityManager.createNamedQuery(queryName);
if(parameters != null) {
for(final Entry<String,Object> parameter : parameters.entrySet()) {
query.setParameter(parameter.getKey(),parameter.getValue());
}
}
return query.executeUpdate();
}
@Override
public <E extends AbstractEntity> List<E> getResultByNamedQuery(final Class<E> objectType,Object> parameters) {
final TypedQuery<E> query = entityManager.createNamedQuery(queryName,objectType);
if(parameters != null) {
for(final Entry<String,parameter.getValue());
}
}
/**
* Found shared references to a collection org.hibernate.HibernateException
*/
entityManager.clear();
return query.getResultList();
}
public CriteriaQuery<?> createCriteria(Class<?> clazz){
return sessionFactory.getCurrentSession().getCriteriaBuilder().createQuery(clazz);
}
@SuppressWarnings("unchecked")
@Override
public <E extends AbstractEntity> List < Map < String,final Class<E> objectType) {
final Query query = entityManager.createNativeQuery(queryName,objectType);
NativeQueryImpl nativeQuery = (NativeQueryImpl) query;
nativeQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List < Map < String,Object >> result = query.getResultList();
for (Map map: result) {
}
return result;
}
@SuppressWarnings("unchecked")
@Override
public List<Object> getResultByNativeQuery(String queryName,Object> parameters) {
final Query query = entityManager.createNativeQuery(queryName);
if(parameters != null) {
for(final Entry<String,parameter.getValue());
}
}
return query.getResultList();
}
@SuppressWarnings("unchecked")
@Override
public <E extends AbstractEntity> List<E> getResultByNativeQuery(String queryName,String name) {
/**
* At least when using Hibernate 4.x and 5.x because the JPA StoredProcedureQuery does not work for SQL FUNCTIONS.
*/
final Query query = entityManager.createNativeQuery(queryName,name);
if(parameters != null) {
for(final Entry<String,parameter.getValue());
}
}
return query.getResultList();
}
@Override
public <E extends AbstractEntity> void executeNativeQuery(String queryName,Object> parameters) {
/**
* At least when using Hibernate 4.x and 5.x because the JPA StoredProcedureQuery does not work for SQL FUNCTIONS.
*/
final Query query = entityManager.createNativeQuery(queryName);
if(parameters != null) {
for(final Entry<String,parameter.getValue());
}
}
query.getSingleResult();
// query.executeUpdate();
}
@SuppressWarnings("unchecked")
@Override
public <E extends AbstractEntity> List<E> getResultByNativeQuery(String queryName,Class<E> objectType) {
/**
* At least when using Hibernate 4.x and 5.x because the JPA StoredProcedureQuery does not work for SQL FUNCTIONS.
*/
final Query query = entityManager.createNativeQuery(queryName,objectType);
if(parameters != null) {
for(final Entry<String,parameter.getValue());
}
}
return query.getResultList();
}
@SuppressWarnings("unchecked")
public void executeUpdate(String queryName,Object> parameters) {
final Query query = entityManager.createNativeQuery(queryName);
if(parameters != null) {
for(final Entry<String,parameter.getValue());
}
}
int update = query.executeUpdate();
}
}
HibernateConfiguration.java
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.noteanalyzer.dao" })
@PropertySource(value = { "classpath:application.properties" })
@PropertySource(value = "file:${CONF_DIR}/application-override.properties",ignoreResourceNotFound = true)
public class HibernateConfiguration {
@Autowired
private Environment environment;
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(new String[] { "com.noteanalyzer.entity" });
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getRequiredProperty("database.driverClassName"));
dataSource.setUrl(environment.getRequiredProperty("database.url"));
dataSource.setUsername(environment.getRequiredProperty("database.username"));
dataSource.setPassword(environment.getRequiredProperty("database.password"));
return dataSource;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect",environment.getRequiredProperty("hibernate.dialect"));
properties.put("hibernate.show_sql",environment.getRequiredProperty("hibernate.show_sql"));
properties.put("hibernate.format_sql",environment.getRequiredProperty("hibernate.format_sql"));
//properties.put("hibernate.hbm2ddl.auto",environment.getRequiredProperty("hibernate.hbm2ddl.auto"));
properties.put("spring.datasource.testOnBorrow",environment.getRequiredProperty("spring.datasource.testOnBorrow"));
properties.put("spring.datasource.validationQuery",environment.getRequiredProperty("spring.datasource.validationQuery"));
return properties;
}
@Bean
@Autowired
public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) {
final JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
application.properties
database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://192.168.1.11:3306/nt
database.username=root
database.password=qwerty
#spring database configuration
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
#Hibernate related properties
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=false
hibernate.format_sql=true
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。