viernes, 28 de diciembre de 2012

Hibernate - Queries

Load an entity

There are two forms to get an entity with the methods load() or get().

public Category getCategory(Long catId) throws DataAccessException {
    return (Category) this.getSessionFactory().getCurrentSession()
                                              .load(Category.class, catId); }

public Category getCategory(Long catId) throws DataAccessException {
    return (Category) this.getSessionFactory().getCurrentSession()
.get(Category.class, catId); }
The difference are:
  • load()
    • Throws an exception if there isn't any row.
    • Has performane benefits.
  • get()
    • Return null if there isn't any row.
HibernateTemplate - Using Parameters with findByNamedParam
In case of use only one parameter, you need the query, parameter name and the value.
public List<ArtEntity> getArtworkInCategory(Long catId)
                                             throws DataAccessException {
    return this.getHibernateTemplate().findByNamedParam(
        "select art from Category cat " +
        "join cat.artEntities art " +
        "where cat.id = :catId ",
        "catId", catId
    );
}

In case of many parameters, you need the query, array with the parameters and the array with corresponding values

public Person authenticatePerson(String username, String password)
                   throws DataAccessException, AuthenticationException {

    List<Person> validUsers = this.getHibernateTemplate().findByNamedParam(
        "select people from Person people where" +
        "people.username = :username " +
        "and people.password = :password",
         new String[] {"username", "password"},
         new String[] {username, password }
    );

    if (validUsers == null || validUsers.size() <= 0) {
        throw new AuthenticationException("No users found");
    } else {
        return validUsers.get(0);
    }
}

Hibernate Core APIs - Using Parameters

public Person authenticatePerson(String username, String password)
                      throws DataAccessException, AuthenticationException {

    Person validUser =
        (Person) this.getSessionFactory().getCurrentSession().createQuery(
            "select people from Person people where" +
            "people.username = :username " +
            "and people.password = :password")
            .setString("username", username)
            .setString("password", password)
            .uniqueResult()
        );

    if (validUser == null) {
            throw new AuthenticationException("No users found");
} else {
        return validUser;
    }
}











No hay comentarios:

Publicar un comentario