我正在开发一个“简单”应用程序,该应用程序将用户数据存储在Mysql数据库上,并使用API查看它们。
我正在使用Spring引导,并且正在使用Spring Data JPA。我已经从javaEE切换到spring了几次,我不得不承认这种抽象有点奇怪。我已经阅读了很多有关它的文章,而我的问题涉及布尔信息检索。
我将详细解释(但您会看到这种情况非常经典): 我有一个具有某些属性(uuid / phone_number / call_date)的实体,并且我的数据库是通过application.properties文件配置的。
在向我的数据库添加新对象之前,我想确保它不存在。为简单起见,我希望在第一时间只检查电话号码。 为此,我正在使用存储库:
public interface ProviderCallDetailRepository extends CrudRepository<ProviderCallDetail, String> {
@Query("select count(e)>0 from ProviderCallDetail e where e.phoneNumber = :phone")
boolean existsByPhoneNumber(@Param("phone")String phoneNumber);
@Query("SELECT p FROM ProviderCallDetail p WHERE p.phoneNumber LIKE ?1")
List<ProviderCallDetail> findByPhoneNumber(String phoneNumber);
}
我在服务中调用此方法:
@Component
@Transactional
public class ProviderCallDetailDao {
@Autowired
private ProviderCallDetailRepository repository;
@PersistenceContext
private EntityManager em;
public boolean checkIfExists(ProviderCallDetail providerCallDetailToCheck) {
if (repository.existsByPhoneNumber(providerCallDetailToCheck.getPhoneNumber()) {
return true;
} else {
return false;
}
}
}
每次插入数据时,我都会查看sql db并继续用手进行检查,即使电话号码已经保留,它也会返回false。 我已经尝试过findByPhoneNumber,每次我得到0个项目的列表。
相反,当我在数据库上执行等效的sql查询时,我得到了正确的条目数。
我不知道我现在应该看什么,任何帮助将不胜感激。
谢谢!
编辑:和ProviderCallDetail
@Entity
public class ProviderCallDetail implements Serializable {
@Id
private UUID uuid;
private String phoneNumber;
private LocalDate callDate;
public ProviderCallDetail(){
super();
this.uuid = UUID.randomUUID();
}
public ProviderCallDetail(String phoneNumber, LocalDate callDate) {
super();
this.uuid = UUID.randomUUID();
this.phoneNumber = phoneNumber;
this.callDate = callDate;
}
public ProviderCallDetail(UUID uuid, String phoneNumber, LocalDate callDate) {
super();
this.uuid = uuid;
this.phoneNumber = phoneNumber;
this.callDate = callDate;
}
public UUID getUuid() {
return uuid;
}
public void setUuid(UUID uuid) {
this.uuid = uuid;
}
public String getPhoneNumber() {
return phoneNumber.substring(0, phoneNumber.length()-2);
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public LocalDate getCallDate() {
return callDate;
}
public void setCallDate(LocalDate callDate) {
this.callDate = callDate;
}
}