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()函数方法。没有更改。同样的问题。它不返回任何内容。任何其他选项都可以用于显示表数据中的空间。那么如何获取?更新答案。请立即尝试。