SpringBootMySQL:如何查询数据库是否为空?

SpringBootMySQL:如何查询数据库是否为空?,mysql,spring,spring-boot,spring-data-jpa,Mysql,Spring,Spring Boot,Spring Data Jpa,我是Spring boot和Jpa的新手,我对查询有问题。我必须实现一种方法,在这种方法中,如果没有具有特定名称的用户,它将返回一条错误消息,而如果有,它将返回具有最长插入日期的用户。现在我已经完成了代码,但我不知道如何在数据库中没有名称的情况下插入异常。我不知道如何把它放在方法中!下面我输入我所做的方法 public UserUpdateEntity findFirstByName(String name) { CriteriaBuilder builder = em.ge

我是Spring boot和Jpa的新手,我对查询有问题。我必须实现一种方法,在这种方法中,如果没有具有特定名称的用户,它将返回一条错误消息,而如果有,它将返回具有最长插入日期的用户。现在我已经完成了代码,但我不知道如何在数据库中没有名称的情况下插入异常。我不知道如何把它放在方法中!下面我输入我所做的方法

public UserUpdateEntity findFirstByName(String name) {
 
        CriteriaBuilder builder = em.getCriteriaBuilder();
        CriteriaQuery<UserUpdateEntity> criteria = builder.createQuery(UserUpdateEntity.class);
        Root<UserUpdateEntity> root = criteria.from(UserUpdateEntity.class);
        criteria.select(root).where(builder.equal(root.get("name"), name));
        criteria.orderBy(builder.asc(root.get("timestamp")));
        TypedQuery<UserUpdateEntity> query = em.createQuery(criteria).setMaxResults(1);
        return query.getSingleResult();

    }
public UserUpdateEntity findFirstByName(字符串名称){
CriteriaBuilder=em.getCriteriaBuilder();
CriteriaQuery criteria=builder.createQuery(UserUpdateEntity.class);
Root=criteria.from(UserUpdateEntity.class);
criteria.select(root).where(builder.equal(root.get(“name”),name));
orderBy(builder.asc(root.get(“timestamp”));
TypedQuery query=em.createQuery(条件).setMaxResults(1);
返回query.getSingleResult();
}

问题具有误导性,我就是这样做的,当您使用get single result时,它必然会抛出
NoResultException
在这种情况下,您不应该
setMaxResults
getSingleResult
而使用
getResultList()
当其大小为1时,表中会显示数据,否则会有可疑之处。请按照我下面的代码操作:

实体类

@实体
@表(name=“用户\更新\实体”)
公共类UserUpdateEntity{
@身份证
@生成值
@类型(Type=“uuid char”)
私有UUID;
私有字符串名称;
@时态(值=TemporalType.TIMESTAMP)
私有日期时间戳;
公共UUID getId(){
返回id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共日期getTimestamp(){
返回时间戳;
}
public void setTimestamp(日期时间戳){
this.timestamp=时间戳;
}
}
标准查询

private UserUpdateEntity searchUserUpdateEntity(字符串名称)引发IndexOutOfBoundsException{
CriteriaBuilder CriteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery CriteriaQuery=criteriaBuilder.createQuery(UserUpdateEntity.class);
Root-from=criteriaQuery.from(UserUpdateEntity.class);
where(criteriaBuilder.equal(from.get(UserUpdateEntity_uu.NAME),NAME));
TypedQuery TypedQuery=entityManager.createQuery(criteriaQuery);
//如果结果集小于1,此行将抛出IndexOutOfBoundsException
UserUpdateEntityResult=typedQuery.getResultList().get(0);
返回结果;
}
测试以检查逻辑

@测试
void testUserExists(){
UserUpdateEntity UserUpdateEntity=新的UserUpdateEntity();
userUpdateEntity.setName(“随机用户”);
userUpdateEntity.setTimestamp(Calendar.getInstance().getTime());
persist(userUpdateEntity);
assertNotNull(userUpdateEntity.getId());
UserUpdateEntity searched=searchUserUpdateEntity(UserUpdateEntity.getName());
assertSame(已搜索,userUpdateEntity);
试一试{
searched=searchUserUpdateEntity(“asdada”);
}catch(IndexOutOfBoundsException e){
Assertions.assertTrue(true);
}
}

问题具有误导性,我就是这样做的,当您使用get single result时,它必然会抛出
NoResultException
在这种情况下,您不应该
setMaxResults
getSingleResult
而使用
getResultList()
当其大小为1时,表中会显示数据,否则会有可疑之处。请按照我下面的代码操作:

实体类

@实体
@表(name=“用户\更新\实体”)
公共类UserUpdateEntity{
@身份证
@生成值
@类型(Type=“uuid char”)
私有UUID;
私有字符串名称;
@时态(值=TemporalType.TIMESTAMP)
私有日期时间戳;
公共UUID getId(){
返回id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共日期getTimestamp(){
返回时间戳;
}
public void setTimestamp(日期时间戳){
this.timestamp=时间戳;
}
}
标准查询

private UserUpdateEntity searchUserUpdateEntity(字符串名称)引发IndexOutOfBoundsException{
CriteriaBuilder CriteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery CriteriaQuery=criteriaBuilder.createQuery(UserUpdateEntity.class);
Root-from=criteriaQuery.from(UserUpdateEntity.class);
where(criteriaBuilder.equal(from.get(UserUpdateEntity_uu.NAME),NAME));
TypedQuery TypedQuery=entityManager.createQuery(criteriaQuery);
//如果结果集小于1,此行将抛出IndexOutOfBoundsException
UserUpdateEntityResult=typedQuery.getResultList().get(0);
返回结果;
}
测试以检查逻辑

@测试
void testUserExists(){
UserUpdateEntity UserUpdateEntity=新的UserUpdateEntity();
userUpdateEntity.setName(“随机用户”);
userUpdateEntity.setTimestamp(Calendar.getInstance().getTime());
persist(userUpdateEntity);
assertNotNull(userUpdateEntity.getId());
UserUpdateEntity searched=searchUserUpdateEntity(UserUpdateEntity.getName());
assertSame(已搜索,userUpdateEntity);
试一试{
searched=searchUserUpdateEntity(“asdada”);
}catch(IndexOutOfBoundsException e){
Assertions.assertTrue(true);
}
}

您的意思是数据库仍然存在但不包含任何表吗?您的意思是数据库仍然存在吗