Quiero guardar algunos Objetos en la base de datos con ID predefinidos usando Hibernate. ¿Es posible hacerlo usando el método de guardar de la sesión de Hibernate?Guardar nuevo objeto con Hibernate usando el ID suministrado
Sé que hay soluciones siguientes:
1) ejecutar comandos SQL con instrucciones de inserción necesarias:
insert into MyObj(id,name) values (100,'aaa'), (101,'bbb');
2) utilice consulta SQL en Hibernate:
public static boolean createObj(Long id, String name) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
if (session.get(MyObj.class, id) == null) {
session.beginTransaction();
SQLQuery sqlQuery = session.createSQLQuery
("insert into myobj(id,name) values(?,?)");
sqlQuery.setLong(0, id);
sqlQuery.setString(1, name);
sqlQuery.executeUpdate();
session.getTransaction().commit();
return true;
} else {
return false;
}
}
Pero: es es posible prescindir de SQLQuery?
En referencia Hibernate en la sección 11.2. Making objects persistent no es ejemplo de código:
Alternativamente, puede asignar el identificador de usando una versión sobrecargada de guardar().
DomesticCat pk = new DomesticCat();
pk.setColor(Color.TABBY);
pk.setSex('F');
pk.setName("PK");
pk.setKittens(new HashSet());
pk.addKitten(fritz);
sess.save(pk, new Long(1234));
Pero no pude encontrar ejemplo de cómo hacer esto.
Entonces, ¿es posible guardar objetos nuevos con los ID suministrados en la base de datos con Hibernate que no utiliza la consulta SQL? Si es así, ¿entonces cómo? Y cómo sobrecargar save() del método de sesión como se menciona en Hibernate reference?
Gracias!
No se olvide de no utilizar generadores de identificación cuando se utiliza-dos argumentos ' save' –
Eh, el enlace correcto es: http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/classic/Session.html#save(java.lang.Object, java.io. Serializable) – iryndin
La única variante de 'Guardar()' que usa dos args toma una cadena y luego el objeto mismo ... no una clave. – Nyerguds