【问题标题】:Hibernate - Query doesn't return anything休眠 - 查询不返回任何内容
【发布时间】:2018-06-08 19:04:25
【问题描述】:

大家好,我是hibernate的新手。我有一个旨在获取单列的方法。

@Override
public List<User> getUsersByEmail(String email) {
    session = sessionFact.openSession();
    Query query = session.getNamedQuery("User.findByEmail");
    query.setParameter("email", email);

    return query.list();
}

之后,返回的值被控制器使用,进一步返回 JSON 数据。它应该返回用户数据,但什么也不返回。

@RequestMapping(value = "/api/customer/customer-id/{email}", method = RequestMethod.GET)
public @ResponseBody List<User> getUserId(@PathVariable String email) {
    return customerDaoImp.getUsersByEmail(email);
}

实体类 User.java

    @Entity
@Table(name = "tbl_user", catalog = "lifestyle", schema = "")
@NamedQueries({
    @NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")
    , @NamedQuery(name = "User.findByUserId", query = "SELECT u FROM User u WHERE u.userId = :userId")
    , @NamedQuery(name = "User.findByFullName", query = "SELECT u FROM User u WHERE u.fullName = :fullName")
    , @NamedQuery(name = "User.findByAddress", query = "SELECT u FROM User u WHERE u.address = :address")
    , @NamedQuery(name = "User.findByContact", query = "SELECT u FROM User u WHERE u.contact = :contact")
    , @NamedQuery(name = "User.findByGender", query = "SELECT u FROM User u WHERE u.gender = :gender")
    , @NamedQuery(name = "User.findByDob", query = "SELECT u FROM User u WHERE u.dob = :dob")
    , @NamedQuery(name = "User.findByEmail", query = "SELECT u FROM User u WHERE u.email = :email")
    , @NamedQuery(name = "User.findByPassword", query = "SELECT u FROM User u WHERE u.password = :password")
    , @NamedQuery(name = "User.findByActive", query = "SELECT u FROM User u WHERE u.active = :active")
    , @NamedQuery(name = "User.findByCreatedDate", query = "SELECT u FROM User u WHERE u.createdDate = :createdDate")})
public class User implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "user_id")
    private Integer userId;

    @NotNull
    @Size(min = 1, max = 256)
    @Column(name = "full_name")
    private String fullName;
    @Size(max = 256)
    @Column(name = "address")
    private String address;
    @Size(max = 30)
    @Column(name = "contact")
    private String contact;
    @Size(max = 10)
    @Column(name = "gender")
    private String gender;
    @Column(name = "dob")
    @Temporal(TemporalType.DATE)
    private Date dob;
    // @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation

    @NotNull
    @Size(min = 1, max = 256)
    @Column(name = "email")
    private String email;

    @NotNull
    @Size(min = 1, max = 256)
    @Column(name = "password")
    private String password;

    @NotNull
    @Column(name = "active", insertable = false)
    private short active;
    @Column(name = "created_date", insertable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;

    public User() {
    }

    public User(Integer userId) {
        this.userId = userId;
    }

    public User(Integer userId, String fullName, String email, String password, short active) {
        this.userId = userId;
        this.fullName = fullName;
        this.email = email;
        this.password = password;
        this.active = active;
    }
//getter and setter

http://localhost:8080/LifeStyle/api/customer/customer-id/nishandhungana41@hotmail.com

这是我输入的获取值的网址

【问题讨论】:

  • 你不能改用post方法吗?

标签: hibernate spring-mvc hql


【解决方案1】:

电子邮件必须经过 URL 编码

http://localhost:8080/LifeStyle/api/customer/customer-id/nishandhungana41%40hotmail.com

所以要识别的@char

【讨论】:

  • 它仍然没有返回任何东西
  • 检查你在控制器中真正得到了什么。
  • @StanishlavL - 如果我手动传递电子邮件,它会返回一组数据,但不是来自 url
  • 再次。在控制器中打印@PathVariable String email 以查看获得的实际值
  • 它打印在 url 中
【解决方案2】:

我认为不承认.

尝试更改为:

@RequestMapping(value = "/api/customer/customer-id/{email:.+}", method =  RequestMethod.GET)
public @ResponseBody List<User> getUserId(@PathVariable String email) {

【讨论】:

  • 缺少 URI 模板变量 'email'对于String类型的方法参数
  • 谢谢先生的回答。你能告诉我添加:.+的目的吗现在它返回给我数据
  • 请看this
猜你喜欢
  • 1970-01-01
  • 2012-03-14
  • 2022-01-19
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
相关资源
最近更新 更多