Hibernate HQL query by using like operator

后端 未结 2 848
耶瑟儿~
耶瑟儿~ 2021-01-04 01:37

Seu the following mapping

@Entity
public class User {

    private Integer id;

    @Id;
    private Integer getId() {
        return this.id;
    }

}


        
相关标签:
2条回答
  • 2021-01-04 02:10

    Well, LIKE operator is usually used with textual data i.e. with VARCHAR or CHAR columns, and you have numeric id column (INTEGER).

    Maybe you could try to map id field also as string and use that field in query. This may or may not work depending on your database engine. Note that you should handle all updates via setId() and consider idAsString field to be read-only.

    @Entity
    public class User {
    
        private Integer id;
        private String idAsString;
    
        @Id;
        private Integer getId() {
            return this.id;
        }
    
        private void setId(Integer id) {
            this.id = id;
        }
    
        @Column(name="id", insertable=false, updatable=false)
        private String getIdAsString() {
           return this.idAsString;
        }
    
        private void setIdAsString(String idAsString) {
           this.idAsString = idAsString;
        }
    }
    

    Then the query would be:

    Query query = sessionFactory.getCurrentSession().createQuery("from User u where u.idAsString like :userId");
    List<User> userList = query.setParameter("userId", userId + "%").list();
    
    0 讨论(0)
  • 2021-01-04 02:22

    According to Hibernate reference:

    str() is used for converting numeric or temporal values to a readable string

    So when i use

    from User u where str(u.id) like :userId
    

    It works fine

    0 讨论(0)
提交回复
热议问题