【问题标题】:working with object with spring and hibernate使用 spring 和 hibernate 处理对象
【发布时间】:2009-07-13 09:19:15
【问题描述】:

希望每个人都很酷。我一直在尝试用 spring-hibernate 做一些事情,但它仍然失败。我对它很陌生。我需要一点帮助。假设一个 POJO 类用户。我想返回用户名的用户对象。虽然我通过这样做没有问题按 id 返回用户对象

   return (Users) getHibernateTemplate().get(Users.class, id);

通过用户名获取用户对象对我来说似乎是一个挑战。这个我试过了

List<Users> users = getHibernateTemplate().find("from Users u where u.username=?",username);
return  users.get(0);

甚至这个

return (Users)getHibernateTemplate().find("from Users u where u.username=?",username).get(0);

我应该怎么做。返回一组用户对象和/或列表的正确方法是什么。感谢阅读。

【问题讨论】:

    标签: java hibernate spring jakarta-ee


    【解决方案1】:

    试试这个

    Query q = session.createQuery("select * from Users u where u.username=:username");
    q.setString("username", username);
    

    【讨论】:

    • 这也是我首选的处理方式。我发现给我的参数命名可以更容易理解代码在做什么。
    【解决方案2】:

    也许你可以试试这个?

    List l =getHibernateTemplate().find("from Users u where u.username=?",new Object[]{username});
    if (l.size() > 0)
     return (User)l.get(0);
    else
    return null;
    

    【讨论】:

    • 请不要害怕'return null' - 这是在调用包含上述代码的方法后不久在某处要求NullPointerException。我首选的处理这种情况的方法是抛出 UserNotFoundException。
    • 我不认为你可以在不知道操作上下文的情况下这样概括。据我们所知,返回 null 可能由接口契约定义。
    • 我返回了一个新的用户对象。谢谢伙计们。用户数组呢?假设我想返回名称为 francis 的所有用户?
    • 那么所有用户的名字都是'james' :)。当然返回列表,而不是第一项。问题出在哪里?顺便说一句,我不赞成在使用 Hibernate 那种强大的 API 的同时为琐碎的情况编写 SQL。
    • 啊,如果没有找到用户返回一个空列表:),而不是抛出异常或返回 null。确实是一个好主意,但取决于接口合同。干杯。
    【解决方案3】:

    另一种更好的方法是使用 Criteria。请参阅下面的示例。

        DetachedCriteria deCriteria = DetachedCriteria.forClass(User.class, "u");
        Criteria criteria = deCriteria.getExecutableCriteria(session);
    
        criteria.add(Restrictions.eq("u.username", username));
        List<User> userList = criteria.list();
    

    【讨论】:

    • 我会试试这个,但我想我会用 spring 函数 findbycriteria 试试,看看效果如何。谢谢
    • 你必须,它不鼓励在使用 Hibernate/Spring 类强大的 API 时为琐碎的情况编写 SQL。
    猜你喜欢
    • 1970-01-01
    • 2012-10-23
    • 2014-11-02
    • 1970-01-01
    • 2020-07-13
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多