Spring Data JPA查询返回错误信息

时间:2018-08-06 13:48:09

标签: java mysql spring spring-data-jpa

我正在开发一个“简单”应用程序,该应用程序将用户数据存储在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;
    }

}

0 个答案:

没有答案