Country country = countryService.findCountryByName(DEFAULT_COUNTRY_NAME)
.orElse(countryService.create(createCountryEntity()));
服务:
public Optional<Country> findCountryByName(String name) {
return dao.findByNameIgnoreCase(name);
}
@Transactional(propagation = Propagation.REQUIRED)
public Country create(Country country) {
return dao.save(country);
}
道:
@Transactional
public interface CountryDao extends JpaRepository<Country, Integer> {
Optional<Country> findByNameIgnoreCase(String name);
}
实体
@Entity
@Table(name = "country")
@Data
public class Country {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "country_id", updatable = false)
@JsonIgnore
private int id;
@Column(name = "country_name")
@NotNull
@Size(min = 4, max = 100)
private String name;
}
我不知道为什么countryService.findCountryByName(DEFAULT_COUNTRY_NAME)
.orElse(countryService.create(createCountryEntity()));
总是进入orElse
块,即使我已验证调试器中是否存在第一部分。
我该如何解决?
答案 0 :(得分:1)
我不知道为什么即使我已经验证了第一部分的存在也总是进入orElse块
这就是Java的工作方式。
orElse
只是一种方法,而不是if条件或其他条件。
因此,其参数将在调用之前得到评估。
您可能想要类似的东西
Country country = countryService
.findCountryByName(DEFAULT_COUNTRY_NAME)
.orElseGet(() -> countryService.create(createCountryEntity()));