如何使用Hibernate通过trim空间从DB获取数据?

时间:2014-08-01 07:42:20

标签: 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;   
    }
UserRole is nothing but that is given below as shown that

 @Entity

@Table(name =“uro_user_roles”) 公共类UserRole {

/* 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函数给出roleName时,我得到了DB数据,这就是

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用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(...))

答案 1 :(得分:0)

在比较之前,在场上做一个小写。我假设该字段永远不会为空。

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