Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过使用Hibernate修剪空间从数据库中获取数据?_Java_Mysql_Spring_Hibernate_Jpa - Fatal编程技术网

Java 如何通过使用Hibernate修剪空间从数据库中获取数据?

Java 如何通过使用Hibernate修剪空间从数据库中获取数据?,java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,我写了一个控制器,如下所示 @RequestMapping(value="find/{roleName}", method=GET) public UserRole getByRoleName(@PathVariable("roleName") String roleName){ UserRole userRole = userRoleService.findByRoleName(roleName); return userRole; } U

我写了一个控制器,如下所示

  @RequestMapping(value="find/{roleName}", method=GET)
    public UserRole getByRoleName(@PathVariable("roleName") String roleName){ 
     UserRole userRole = userRoleService.findByRoleName(roleName);
        return userRole;   
    }
UserRole is nothing but that is given below as shown that

 @Entity
@表(name=“uro\u用户\u角色”) 公共类用户角色{

/* Properties */
@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "uro_role_id")
private Integer roleId;

@Column(name = "uro_role_name")
private String roleName;

@Column(name = "uro_create_user")
private String createUser;

@Column(name = "uro_active")
private String createActive;

/* Getter / Setters */ 
现在,当我使用下面的Hibernate函数给出角色名时,我得到了DB数据

     public UserRole findByRoleName(String roleName) {
     UserRole userPermission = (UserRole)  
      criteria().setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
                .add(eq("roleName", roleName)).uniqueResult();
        return userPermission;
    }

这里我的问题是,当我给出确切的名称时,它只返回对象,因为它区分大小写。我的意思是,如果表数据在其值之前有一些空间,那么它就不会返回。因此,如何通过给定名称而不区分空间和大小写来获取数据。hibernate中是否有任何选项可以从DB中获取数据,同时消除空格?如果有,我可以这是一个选项,那么就不需要编写一个y询问的Trim()方法。请大家在比较之前帮助

对字段进行小写。我假设该字段从不为空

 public UserRole findByRoleName(String roleName) {
 UserRole userPermission = (UserRole)  
  criteria().setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
            .add(eq("rolename", roleName.trim().toLowerCase())).uniqueResult();
    return userPermission;
}

您可以使用SQL限制:

public UserRole findByRoleName(String roleName) {
    UserRole userPermission = (UserRole) criteria()
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
            .add(Restrictions.sqlRestriction("TRIM(LOWER({alias}.roleName)) = ?", roleName.trim().toLowerCase()), StringType.INSTANCE))
            .uniqueResult();
    return userPermission;
}

这在MySQL中可以工作,但并非所有数据库都有
TRIM()
函数。其他数据库有
LTRIM()
RTRIM()
,因此必须像
LTRIM(RTRIM(…)一样调用它

也许你可以使用正则表达式。然后,你会得到与模式匹配的所有结果。这将是更好的方法。我想我已经更新了我的答案。现在试试。我的答案对你有帮助吗?没有。我想要喜欢。添加(eq(“rolename”,rolename.trim().toLowerCase())。uniqueResult();。但我不知道这是对还是错,我也试过这个,但没有改变,这里不区分大小写,这里有空格问题。如果DB表中的名称前面有空格,那么它会返回null。那么有没有像u给toLowerCase()这样的Trim()函数方法。没有更改。同样的问题。它不返回任何内容。任何其他选项都可以用于显示表数据中的空间。那么如何获取?更新答案。请立即尝试。