我正在编写一个spring引导应用程序,并且有一个唯一的对象,该对象持久化在数据库中,并由以下crud存储库检索:
@Repository
public interface DefaultSurveyRepository extends CrudRepository <DefaultSurvey, UUID> {
public static final UUID specialId = UUID.fromString("123e4567-e89b-12d3-a456-556642440000");
default DefaultSurvey findSpecialInstance() {
return findById(specialId).orElseThrow(() -> new IllegalStateException("No Default Survey Found"));
}
}
在我的服务类构造函数中,我尝试查找对象的specialinstance,如果失败,我将创建一个新版本。代码如下:
@Service
@Transactional
public class AdminManagement {
private final DefaultSurveyRepository repo;
@Autowired
public AdminManagement(DefaultSurveyRepository repo) {
//Check if defaultSurvey exists.
try{
repo.findSpecialInstance();
}
catch(IllegalStateException e){
repo.save(new DefaultSurvey(UUID.fromString("123e4567-e89b-12d3-a456-556642440000"), "[]"));
}
this.repo = Objects.requireNonNull(repo);
}
.
.
.
问题是,如果对象不存在,它不会捕获illegalstateexception并崩溃。我试过设置断点进行调试,但是在到达断点之前它就崩溃了。也许我没有调试正确,但我不明白为什么它不会工作。感谢您的帮助!
1条答案
按热度按时间zyfwsgd61#
正如评论中提到的,最好实现commandlinerunner。另一个“简单”选项是将回购的初始化详细信息留在@postconstruct:
请记住,java ee注解在java9中已被弃用,在java 11中已被删除,因此必须将其添加到maven pom.xml中: