Problemas para actualizar registro con hibernate

Que tal: buenas a todos.
Requiero de su ayuda, me encuentro haciendo un pequeño crud, con Hibernate Struts2, buno ya hice todos los métodos excepto el de actualizar ya hice de todo y sigo investigando, me acerco a uds. esperando alguien pueda ayudarme y aclarar mi duda, el problema radica en el ID ya que si uso un saveORupdate lo toma como si uera nueva ya que en la tabla el ID esta definido como clave primaria y auto-incremento, y en el proyecto esta definido de la misma manera con anotaciones y con XML, para no tener este problema, pues bien seque el problema rdicaen el ID porque corro el proyectoen modo Debug además de que capturo los errores y el objeto que recibe va con todas s modificaciones excepto el ID lo cual es normal por lo que ya les comente de llave primaria etc. y cuando llega al sesión.update(objeto x) dice que no pude ir nullo y cuando uso un saveORupdate lo agrega ya que como el ID va como nulo lo toma si fuera un nuevo regitro, modifique el método usando hql y quedo de la siguiente manera, para esto quiero menciónales que es una tabla con 4 campos, id, nombre, precio y fecha.

public boolean update(Libro libro){
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
Query query = session.createQuery("UPDATE Libro SET idlibro = NULL, nombre = :nombre, precio = :precio, fpublica = :fpublica WHERE idlibro = 'null'");
query.setString("nombre", libro.getNombre());
query.setFloat("precio", libro.getPrecio());
query.setString("fpublica", libro.getFpublica());
int modificar = query.executeUpdate();
//session.update(libro);
transaction.commit();
return true;
} catch (Exception e) {
if(!(transaction==null)){
System.out.println("" + e.getLocalizedMessage() + " : " + e.getMessage() + " : " + e.getCause() + " : " + e.getStackTrace());
System.out.println(e.getMessage());
transaction.rollback();
}
}finally{
session.close();
}
return false;
}

con este método ya no me manda ningún tipo de error y cuando lo corro en modo Debug puedo ver que si pasa por todo el código osea que aparentemente si hace la actualización, pero relámete no hace nada, cuando regresa al método que lo mando llamar que es de tipo boolean lo regresa como true esto quiere decir que si hizo el update pero no, no lo hace y no manda error de ningún tipo, el método que lo manda llamar esta de la siguiente manera, que simplemente e un llamado.

public String procesoupdate() throws Exception{
LibModelo = new LibroModelo();

boolean resultado = LibModelo.update(this.libro);

return SUCCESS;
}

mi entididad esta de la siguiente manera.
@Entity
@Table(name="libro", catalog="libreria")
public class Libro implements java.io.Serializable {

private Integer idlibro;
private String nombre;
private Float precio;
private String fpublica;

public Libro() {
}

public Libro(String nombre, Float precio, String fpublica) {
this.nombre = nombre;
this.precio = precio;
this.fpublica = fpublica;
}

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idlibro", unique = true, nullable = false)
public Integer getIdlibro() {
return this.idlibro;
}

public void setIdlibro(Integer idlibro) {
this.idlibro = idlibro;
}

@Column(name="nombre", length=100)
public String getNombre() {
return this.nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

@Column(name="precio", precision=12, scale=0)
public Float getPrecio() {
return this.precio;
}

public void setPrecio(Float precio) {
this.precio = precio;
}

@Column(name="fpublica", length=50)
public String getFpublica() {
return this.fpublica;
}

public void setFpublica(String fpublica) {
this.fpublica = fpublica;
}
}

mi mapero quedo deesta manera:

la estructura de la base de datos como les comento son solo tres campos cabe señalar que efects de practisidad por l momento esta cmo tipo string en la base de datos no me ineteresa que sea de tipo fecha por el momento, pero queda asi la estructura, id tipo int, nombre varchar, precio float, fecha string, por favor ayúdenme denme una pista de lo que puedo hacer para resolver este problemilla, les doy las gracias por tomarse el tiempo de leer mi problema, saludos a todos.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Resuelto

que tal: amigos, quiero comentarles que después de una semana entera de estar con mi problema ya lo he resuelto, y me da hasta cierta pena decirles que fue un error de principiante mis métodos estaban bien el primero y el segundo, el problema estaba en como mandaba la información del formula precisamente tenia mal capturado el ID en realidad no mandaba nada al método porque estaba mal, mandaba todos los campos menos el ID por eso me mandaba ese error que no podía ir nulo el ID, el ID lo tengo como tipo hidden asi que el usuario no lo ve, como ID es una llave primaria pensé que no lo mandaba, en fin error de principiante y lo pague con mas aprendizaje, muchas gracias.

Re: resuelto

 

Incluso el programador más experimentado peca de excesiva confianza y comete uno que otro error vengonzoso. El único consuelo que queda es que entre más experiencia se tenga, encontrar el error y su posterior solución es cada vez más rápido... Bueno, ¡eso si es que a uno no se le va el avión!

✈✈✈