java - Spring ORM JNDI Tomcat - 没有可用的实际事务的 EntityManager

标签 java tomcat jpa spring-orm

我可以找到但无法保存我的实体。

Tomcat 上下文:

      <Resource name="jdbc/spring" auth="Container" type="javax.sql.DataSource"
           maxTotal="100" maxIdle="30" maxWaitMillis="10000"
           username="spring" password="spring" driverClassName="com.mysql.jdbc.Driver"
           url="jdbc:mysql://localhost:3306/spitter"/>

DatabaseConfig 和 jpa 配置:

@Configuration
public class DatabaseConfig {

    @Bean
    public JndiObjectFactoryBean dataSource(){
        JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
        jndiObjectFactoryBean.setJndiName("jdbc/spring");
        jndiObjectFactoryBean.setResourceRef(true);
        jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class);
        return jndiObjectFactoryBean;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter(){
        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setDatabase(Database.MYSQL);
        adapter.setGenerateDdl(false);
        adapter.setShowSql(true);
        adapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect");
        return adapter;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter adapter){
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean =
                new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(dataSource);
        entityManagerFactoryBean.setJpaVendorAdapter(adapter);
        entityManagerFactoryBean.setPackagesToScan("com.springinaction.spittr");
        entityManagerFactoryBean.setJpaProperties(jpaProperties());
        return  entityManagerFactoryBean;
    }

    @Bean
    public PersistenceAnnotationBeanPostProcessor paPostProcessor(){
        return new PersistenceAnnotationBeanPostProcessor();
    }

    @Bean
    public BeanPostProcessor persistenceTranslation(){
        return new PersistenceExceptionTranslationPostProcessor();
    }

    private Properties jpaProperties(){
        Properties properties = new Properties();
        properties.put("hibernate.hbm2ddl.auto", "create-drop");
        return properties;
    }

和 DAO:

@Repository
@Transactional
public class UserRepositoryImpl implements UserRepository {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public User findUser(Long id) {
        return entityManager.find(User.class, id);
    }

    @Override
    public User findUserByUsername(String username) {
        return (User)entityManager.createQuery("Select u from User u where username= :username ")
                .setParameter("username", username)
                .getSingleResult();
    }

    @Override
    public void addUser(User user) {
        entityManager.persist(user);
    }
}

服务:

@Service
public class UserService implements UserDetailsService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
        User user = new User();
        user.setUsername("admin");
        user.setPassword("admin");
        Role role = new Role();
        role.setRole("ADMIN");
        Role role2 = new Role();
        role2.setRole("USER");
        HashSet set = new HashSet();
        set.add(role);
        set.add(role2);
        user.setRoles(set);
        userRepository.addUser(user);
        return userRepository.findUserByUsername(s);
    }
}

当我到达 userRepository.addUser(user) 时,没有实体被保存到我的数据库中,我得到没有 EntityManager 和实际事务可用异常。

我哪里错了?

最佳答案

好的,我没有将@EnableTransactionManagement() 放在我的配置上。 关闭

关于java - Spring ORM JNDI Tomcat - 没有可用的实际事务的 EntityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33412021/

相关文章:

java - 可见性元素定位与可见性

java - Hadoop:识别映射器中输入拆分的结束

java - SessionFactory 给我 java.lang.NullPointerException

java - Spring 启动 : ClassNotFoundException when configuring maxUploadSize of CommonMultipartResolver

java - 无法使用 ehcache 配置 JPA

java - Hibernate Map ID 自动从字段中获取

java - 使用 Arraylist 填充 JCombobox

java - 使用两个 Activity [ANDROID] 显示消息输出的问题

java - jUnit、嵌入式 Tomcat 和 Hibernate java.lang.ClassCastException

java - JPA:通过不同的列选择任何行