Mein Code, wirklich, wirklich vereinfacht wie folgt aussieht:Spring Data JPA Transaktion Ausgabe
@Entity
public class Item {
@Id
@GeneratedValue
@Column(name = "ID")
private int id;
@Pattern(regexp="^[a-zA-Z0-9.\\s]+$", message="only letters, numbers, spaces and {.!}!")
private String name;
// getter, setter
}
Mein JPA Repository:
public interface ItemJpaRepository extends JpaRepository<Item, Integer>{}
Mein Service:
@Service
@Transactional
public class ItemService {
@Autowired
ItemDAO itemDAO;
@Autowired
ItemJpaRepository itemJpaRepository;
public void saveOrUpdateItem(){
itemDAO.saveOrUpdateItem(); //working
itemJpaRepository.save(entity) //not working
}
public void findAllItems(){
System.out.println(itemJpaRepository.findAll());
}
}
Beans, die verwendet für die Datenbankverbindung sind wie folgt deklariert:
@Bean
public DataSource getDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/shoppingcartspringmvcspringdatahibernate");
dataSource.setUsername("root");
dataSource.setPassword("Scholl1313.");
//dataSource.setValidationQuery("select 1");
return dataSource;
}
@Bean(name = "sessionFactory")
public SessionFactory getSessionFactory() {
LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(getDataSource());
sessionBuilder.scanPackages("com.zdranganele.models");
sessionBuilder.setProperty("hibernate.show_sql", "true");
sessionBuilder.setProperty("hibernate.hbm2ddl.auto", "create");
sessionBuilder.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
return sessionBuilder.buildSessionFactory();
}
@Bean(name = "transactionManager")
public HibernateTransactionManager getTransactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager(getSessionFactory());
return transactionManager;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(getDataSource());
entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);
entityManagerFactoryBean.setPackagesToScan("com.zdranganele.models");
return entityManagerFactoryBean;
}
ItemDao
ist ein klassisches DAO. Speichern durch ItemDao
funktioniert, sparen durch ItemJpaRepository
nicht. Auch zum Löschen. Finden Sie nur Arbeiten an ItemJpaRepository
. Es wird kein Fehler ausgegeben, daher denke ich, dass die Transaktion niemals ausgeführt wird.
Ein Problem, weil .... was? – Antoniossss
@Antoniossss Speichern speichert die Entität nicht in der Datenbank. Durch das Löschen wird auch keine Entität aus der Datenbank gelöscht. Ich kann nur Objekte mit findOne() oder findAll() aus der Datenbank holen –