Springboot Jpa save操作が無効な問題
Springboot Jpa save操作が無効です
1.まずjpa基本構成を貼り付ける
2.サービスコール
最終結果:insert文が印刷されました
3、デフォルトのトランザクションマネージャを使用する場合は、クラスに@Componentを付けるクラスを書くこともできます.
PlatformTransactionManagerに戻る方法が1つしかないTransactionManagementConfigurerインタフェースを実装します.ここで返されるPlatformTransactionManagerは、デフォルトのトランザクション・プロセッサであることを示します.これにより、Transactional注釈でどのトランザクション・マネージャを使用するかを宣言する必要はありません.参照リンク:http://www.importnew.com/24138.html
1.まずjpa基本構成を貼り付ける
@SpringBootApplication
@EnableTransactionManagement
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication .class, args);
}
}
@Configuration
public class JpaConfig{
@Autowired
private DynamicDataSource dynamicDataSource;
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("com.xxx.xxx.entity");
factory.setJpaProperties(hibernateProperties());
factory.setDataSource(dynamicDataSource);
return factory;
}
@Bean("tx")// bean tx ,
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory);
return txManager;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
// sql
properties.put("hibernate.show_sql", true);
// sql
properties.put("hibernate.format_sql", true);
//
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
//
properties.put("hibernate.hbm2ddl.auto", "update");
//
// properties.put("hibernate.connection.autocommit",false);
// properties.put("org.hibernate.flushMode", "COMMIT");
// properties.put("hibernate.enable_lazy_load_no_trans",true);
return properties;
}
}
2.サービスコール
@Transactional(value = "tx") //
public SysPrivilege createPrivilegeIfNotFound(String name) {
SysPrivilege privilege = privilegeRepository.findPrivilegeByName(name);
if (privilege == null) {
privilege = new SysPrivilege();
privilege.setName(name);
privilege = privilegeRepository.save(privilege);
}
return privilege;
}
最終結果:insert文が印刷されました
Hibernate:
insert
into
sys_privilege
(name)
values
(?)
Hibernate:
select
sysprivile0_.id as id1_0_,
sysprivile0_.icon as icon2_0_,
sysprivile0_.name as name3_0_,
sysprivile0_.`
order` as order4_0_,
sysprivile0_.parentId as parentId5_0_,
sysprivile0_.parentName as parentNa6_0_,
sysprivile0_.perms as perms7_0_,
sysprivile0_.type as type8_0_,
sysprivile0_.url as url9_0_ from
sys_privilege sysprivile0_
where
sysprivile0_.name=?
3、デフォルトのトランザクションマネージャを使用する場合は、クラスに@Componentを付けるクラスを書くこともできます.
PlatformTransactionManagerに戻る方法が1つしかないTransactionManagementConfigurerインタフェースを実装します.ここで返されるPlatformTransactionManagerは、デフォルトのトランザクション・プロセッサであることを示します.これにより、Transactional注釈でどのトランザクション・マネージャを使用するかを宣言する必要はありません.参照リンク:http://www.importnew.com/24138.html