私は初めてSpringデータを使用しようとしています。実装するSpring用のリポジトリインタフェースを作成しました。私はfindAll()
メソッドを使用しており、うまく動作します。しかし、save()
とdelete()
のメソッドは期待どおりに動作しません。データは保持されませんが、例外はスローされません。春のデータ - データはロードされても保存されません。
ハイバネートコードでデバッグしようとしましたが、イベントEntityDeleteAction[com.my.test.City#2]
がActionQueueに追加されていますが、そのメソッドは呼び出されません。そして私はその理由を知ることはできませんでした。
お願いします。以下は、データベースの作成コード、Javaの設定、私のエンティティとリポジトリのコードです:
CREATE TABLE cities(
id SERIAL PRIMARY KEY,
name VARCHAR(45) NOT NULL UNIQUE
);
INSERT INTO cities(id, name) VALUES (1, 'Moscow');
INSERT INTO cities(id, name) VALUES (2, 'St.Petersburg');
City.javaを
@Entity
@Table(name = "cities")
public class City {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
public String name;
}
CityRepository.java:
@Repository
public interface CityRepository extends CrudRepository<City, Long> {}
AppConfig.java(一部)
@EnableWebMvc
@Configuration
@ComponentScan(value = ...)
@EnableJpaRepositories("com.my.test.repository")
@Import(value = {
SecurityConfig.class,
WebMvcConfig.class
})
@PropertySource("classpath:db.properties")
@EnableTransactionManagement
public class AppConfig extends WebSecurityConfigurerAdapter
@Bean
DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("db.driver"));
dataSource.setUrl(env.getProperty("db.url"));
dataSource.setUsername(env.getProperty("db.username"));
dataSource.setPassword(env.getProperty("db.password"));
return dataSource;
}
@Bean
SessionFactory sessionFactory() {
LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource());
sessionBuilder.scanPackages("com.my.test");
sessionBuilder.addProperties(getHibernateProperties());
return sessionBuilder.buildSessionFactory();
}
@Bean
PlatformTransactionManager transactionManager() {
return new HibernateTransactionManager(sessionFactory());
}
@Bean
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan(
"com.my.test.repository",
"com.my.test.entity"
);
em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
return em;
}
private Properties getHibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
return properties;
}
方法I実行:
cityRepository.delete(2);
ありがとうございます!
どこが ''このcityRepository.delete(2)を実行していることから、 –
間違ったトランザクションマネージャを使用しています。 JPAを使用しているので、 'HibernateTransactionManager'ではなく' JpaTransactionManager'を使う必要があります。 –
M.デニウム、そうですよ!これは助けになりました。私は解決策としてそれをマークすることができるように答えとして投稿しますか? – awfun