Hibernate SpringBoot JPA存储库通过MariaDB4j保存
当我试图从Hibernate SpringBoot JPA存储库通过MariaDB4j保存,hibernate,spring-boot,jpa,repository,mariadb4j,Hibernate,Spring Boot,Jpa,Repository,Mariadb4j,当我试图从ApplicationRunner保存到MariaDBj时,遇到了一个奇怪的问题 我已经创建了实体以及@服务和JpaRepository。我添加了日志记录,因此我知道我的应用程序正在到达RegionEntity savedRegion=repository.save(dummyRegion)
ApplicationRunner
保存到MariaDBj
时,遇到了一个奇怪的问题
我已经创建了实体以及@服务
和JpaRepository
。我添加了日志记录,因此我知道我的应用程序正在到达RegionEntity savedRegion=repository.save(dummyRegion)方法,我确实从savedRegion
获得id
,但当我执行repository.count()
或repository.findById(…)
时,我分别获得0
或可选的.EMPTY
此外,通过@Controller
从API端点/region/创建的使用相同的存储库,调用由其工作的相同repo支持的服务,实体被持久化
我不明白为什么当我通过ApplicationRunner
使用同一存储库时,实体没有被持久化?我确信我不需要刷新/提交事务。我还使用spring.jpa.hibernate.ddl auto=update
@Repository
public interface RegionRepository extends JpaRepository<RegionEntity, Integer> {
}
@Entity
@Table(name = "region_tb")
public class RegionEntity implements Serializable {
private static final long serialVersionUID = 4966369808179876078L;
@Id
@GeneratedValue
private Integer id;
private String name;
private String standard;
private Double price;
}
@Service
public class RegionService {
private final RegionRepository regionRepository;
public RegionService(RegionRepository regionRepository) {
this.regionRepository = regionRepository;
}
public void saveRegions() {
RegionEntity dummyRegion = new RegionEntity();
dummyRegion.setName("Test1");
dummyRegion.setStandard("s1");
dummyRegion.setPrice(12.99);
RegionEntity savedRegion = regionRepository.save(dummyRegion);
// savedRegion.getId() has valid id
Optional<TestVariantEntity> foundRegion = regionRepository.findById(savedRegion.getId());
// Optional.EMPTY
}
}
// Application BootStrap
@Component
public class ApplicationBootstrap implements ApplicationRunner {
private final RegionService regionService;
@Autowired
public PriceListDataBootstrap(RegionService regionService) {
this.regionService = regionService;
}
@Override
public void run(ApplicationArguments args) throws Exception {
regionService.saveRegions();
}
}
@存储库
公共接口区域存储库扩展了JpaRepository{
}
@实体
@表(name=“region\u tb”)
公共类RegionEntity实现可序列化{
私有静态最终长serialVersionUID=4966369808179876078L;
@身份证
@生成值
私有整数id;
私有字符串名称;
私有字符串标准;
私人双价;
}
@服务
公共类区域服务{
私有最终区域存储库区域存储库;
公共区域服务(区域存储库区域存储库){
this.regionRepository=regionRepository;
}
公共存储区域(){
RegionEntity dummyRegion=新RegionEntity();
dummyRegion.setName(“Test1”);
Dummy区域。设置标准(“s1”);
dummyRegion.setPrice(12.99);
RegionEntity savedRegion=regionRepository.save(dummyRegion);
//savedRegion.getId()具有有效的id
可选的foundRegion=regionRepository.findById(savedRegion.getId());
//可选。空
}
}
//应用程序引导
@组成部分
公共类ApplicationBootstrap实现ApplicationRunner{
专用最终区域服务区域服务;
@自动连线
公共价格表Databootstrap(RegionService RegionService){
this.regionService=regionService;
}
@凌驾
公共void运行(ApplicationArguments参数)引发异常{
regionService.saveRegions();
}
}
我的家属是这样的:
<dependency>
<groupId>ch.vorburger.mariaDB4j</groupId>
<artifactId>mariaDB4j</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
ch.vorburger.mariaDB4j
马里亚杰
2.4.0
org.mariadb.jdbc
mariadb java客户端
2.5.4
org.springframework.boot
spring引导启动器数据jpa
Springboot2.1.11
。非常感谢您的帮助?这似乎是MariaDB4j的问题;当我将下面的实现替换为内存中的H2时,它工作得非常好。@vorburger可能会有所帮助,这似乎是MariaDB4j的问题;当我将下面的实现替换为内存中的H2时,它工作得非常好。@vorburger可能会有所帮助