Я хочу обработать транзакцию на служебном уровне с помощью спящего режима с помощью Springbbot, как показано ниже.Транзакция не принимается.Я не хочу, чтобы транзакция была обработана весенними данными jpa.это должно быть сделано hibernate.что не так с
AppConfig.java
package com
import java.util.Properties;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@ComponentScan(basePackages = { "com" })
@EnableJpaRepositories(basePackages = { "com" })
@EntityScan(basePackages = { "com" })
@EnableTransactionManagement
public class AppConfig {
@Autowired
DataSource dataSource;
public DataSource dataSource() {
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan("com");
Properties hibernateProperties = new Properties();
hibernateProperties.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
hibernateProperties.put("hibernate.show_sql", true);
hibernateProperties.put("hibernate.hbm2ddl.auto", "update");
sessionFactory.setHibernateProperties(hibernateProperties);
return sessionFactory;
}
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory().getObject());
return txManager;
}
}
Сервисный уровень
package com.codeatomic.springbootquickstart.topic;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class TopicService {
@Autowired
private TopicRepository dao;
@Transactional
public Topic getTopicHibernate() {
Topic topic=new Topic("spring", "Spring Framework", "Spring framework description.");
//transactionManager.co
return dao.saveTopic(topic);
//int i=1/0;
//topic=new Topic("java", "Core Java", "Core Java description.");
// dao.saveTopic(topic);
//return dao.getTopic();
}
}
Dao Layer
package com.codeatomic.springbootquickstart.topic;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TopicDao {
@Autowired
SessionFactory sessionFactory;
public Topic saveTopic(Topic t) {
t.setId("20");
Session session = sessionFactory.openSession();
//t= this.getTopic();
//Transaction tx;
//tx = session.beginTransaction();
session.save(t);
//tx.commit();
System.out.println(t);
return t;
}
}
Topic.java
@Entity
@Table(name="topic")
public class Topic implements Serializable {
private static final long serialVersionUID = 865790868118561501L;
@Id
private String id;
@Column(name="name")
private String name;
@Column(name="description")
private String description;
Пожалуйста, помогите.что не так с кодом выше