2012-10-05 19 views
12

Estaba leyendo el tutorial Hibernate HQL y encontré que HQL no admite INSERT INTO..VALUES.. pero INSERT INTO..SELECT.. es decir, HQL solo admite insertar desde otra tabla.Insertar datos en una tabla usando HQL en Hibernate

Supongamos que quiero insertar los mismos valores en una tabla y que los datos no son de ninguna otra tabla, es decir, los valores no están en ninguna otra tabla. Entonces, ¿cómo puedo hacer eso en HQL?

Además, ¿le gustaría saber la razón detrás de tales restricciones en HQL?

+0

No entienden que downvoted esta pregunta? El que lo hizo, por favor hágamelo saber la razón por la que puedo tener cuidado en el futuro – Anand

+0

no estoy downvoter, pero yo creo que deberías leer esto: http://stackoverflow.com/faq#dontask – user1516873

Respuesta

7

No necesita usar hql para insertar si los datos provienen de otra tabla.

Simplemente obtenga una referencia a su entidad, obtenga una sesión de Hibernate y llame a save().

Según http://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch04.html#d0e2116

Pseudo-sintaxis de las sentencias INSERT

INSERT INTO EntityName lista de propiedades select_statement

Sólo el INSERT INTO ... SELECT ... la forma es soportado. No puede especificar valores explícitos para insertar.

+2

Me pregunto cómo puedo insertar datos en una tabla en HQL. Nota: Los datos que se insertarán no son de otra tabla. – Anand

+0

Agregué documentación de hibernación para insertar. – swemon

+0

gracias por dejarlo claro – Anand

3

Hibernate es un marco ORM (Object-Relational Mapping).

Su trabajo es que le das objetos (Entidades) y él gestiona el almacenamiento (a través de Session.save(), IIRC).

Por lo tanto, no utiliza el HQL para insertar nuevos registros, pero utilice los métodos ORM.

Y (esto es una suposición) por otro lado, como cargar entidades de una tabla, copiarlas a otras entidades y almacenarlas una por una es lenta, HQL proporciona un acceso directo al SQL en la BD solo para eso operación específica para propósitos de rendimiento.

+0

Sé que el uso de la sesión. save() puedo hacer lo mismo pero solo quiero saber cómo puedo insertar datos (no de ninguna otra tabla) en una tabla usando HQL. – Anand

+1

El proveedor del marco dice que no puede hacer eso. Usted conoce una alternativa, y se le da una razón fundamental. Sin embargo, solo dices que quieres hacerlo de esa manera ... al menos, tenemos suerte de que seas un programador y no un piloto de avión. Si solo quiere usar SQL, use SQL y no Hibernate. – SJuan76

+0

Nunca he dicho que quiero hacer de esa manera, le estoy preguntando si podemos hacer eso o not..i espera que usted entiende la diferencia .. – Anand

1

Puede usar session.save(object) para insertar datos en las tablas.

Cuestiones relacionadas