Tengo problema para exceute una actualización-HQL-consulta.

Quiero editar los valores guardados en el perfil de la entidad, pero no hubo suerte.

mi entidades tiene el siguiente aspecto

@Entity
@Table(name = "users", catalog = "testdb")
public class UserEntity implements java.io.Serializable {

private Integer id;
private String username;
private String password;
private Profile profile;

@OneToOne(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL)
public Profile getProfile() {
    return this.profile;
}

public void setProfile(Profile profile) {
    this.profile = profile;
}
}

@Entity
@Table(name = "profiles", catalog = "testdb")
public class Profile implements java.io.Serializable {
private Integer id;
private UserEntity user;
private String firstName;
private String lastName;

@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn
public UserEntity getUser() {
    return this.user;
}

public void setUser(UserEntity user) {
    this.user = user;
}
}

Controlador quiero ejecutar la siguiente consulta de actualización:

@RequestMapping(value = "/profile", method = RequestMethod.POST)
public String profilePost(ModelMap model, @ModelAttribute("user") UserEntity user) {

    Session session = HibernateUtil.getSessionFactory().openSession();

session.beginTransaction();

Query query = session.createQuery("update UserEntity u set u.profile.firstName =     :firstName"
                    + " where u.username = :username");

query.setParameter("firstname", "john");
query.setParameter("username", user.getUsername());
int result = query.executeUpdate();

session.getTransaction().commit();

return "redirect:/login";
}

me podría dar algunos consejos de cómo debe lok esta consulta:)?

InformationsquelleAutor user1199476 | 2012-03-11

1 Comentario

  1. 2

    De la documentación:

    Sólo puede haber una sola entidad con nombre en la cláusula. Se puede,
    sin embargo, ser un alias. Si el nombre de la entidad es un alias, entonces cualquier propiedad
    las referencias deben ser calificados usando un alias. Si el nombre de la entidad es
    no un alias, entonces es ilegal para cualquier propiedad de referencias
    calificados.

    No se une, ya sea implícita o explícita, se puede especificar en una masiva HQL
    consulta. Sub-consultas pueden ser utilizados en las cláusulas where, donde el
    subconsultas mismos pueden contener combinaciones.

    La idea de un ORM como Hibernate, es para evitar tales consultas de actualización. Usted obtener un persistente entidad de la sesión, de modificarlo, y de Hibernación de forma transparente guarda las actualizaciones a la base de datos:

    Query query = session.createQuery("select p from Profile p where p.user.username = :username");
    Profile p = query.setString("username", user.getUsername()).uniqueResult();
    p.setFirstName("john");
    

Dejar respuesta

Please enter your comment!
Please enter your name here