todas las generatedvalue anotaciones java hibernate spring jpa

java - las - jpa entity



¿Cómo funciona la creación automática de tablas en Spring/Hibernate/jpa? (8)

¿Puedes intentar cambiar la propiedad generateDdl a falso en HibernateJpaVendorAdapter en tu archivo de configuración de primavera?

Parece entrar en conflicto con la propiedad hibernate hibernate.hbm2ddl.auto

Consulte https://jira.springframework.org/browse/SPR-6836 para obtener más información.

No puedo hacer funcionar la creación automática de tablas en primavera cuando uso hibernate / jpa.

Aquí están mis archivos de configuración:

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="naveroTest"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>xxx</class> ... <properties> <property name="hibernate.archive.autodetection" value="class, hbm"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> <property name="hibernate.connection.url" value="jdbc:hsqldb:file:/tmp/naveroTestDB"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.hbm2ddl.auto" value="create"/> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> </properties> </persistence-unit> </persistence>

context.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:tx="http://www.springframework.org/schema/tx" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd"> <!-- For auto creation of tables --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> <property name="url" value="jdbc:hsqldb:file:/tmp/naveroTestDB" /> <property name="username" value="sa" /> <property name="password" value="" /> </bean> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="loadTimeWeaver"> <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> </property> <property name="jpaVendorAdapter"> <bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="generateDdl" value="true" /> <property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect" /> <property name="showSql" value="true" /> </bean> </property> </bean> <bean id="PictureBean" class="de.navero.server.bl.PictureBean"> <property name="entityManagerFactory"><ref local="entityManagerFactory" /></property> </bean> </beans>

Alguna idea de lo que puede estar mal? Gracias por cualquier ayuda :).


En Mi hibernate-default.cfg.xml usé

<property name="hibernate.hbm2ddl.auto">update</property>

y funcionó perfectamente, por lo que el archivo de configuración fue el siguiente

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="current_session_context_class">thread</property> <!-- When an HQL statement declares a true/false, replace with the standard Y/N --> <property name="hibernate.query.substitutions">true ''Y'', false ''N''</property> <!-- A useful property do debugging queries. Besure sure it is false or commented out when going PROD --> <!-- <property name="hibernate.show_sql">true</property> --> <!-- Format the printed out SQL generated by Hibernate --> <property name="hibernate.format_sql">false</property> <!-- If enabled, Hibernate will collect statistics useful for performance tuning - JMX --> <property name="hibernate.generate_statistics">false</property> <property name="hibernate.hbm2ddl.auto">update</property> <mapping class=....


En mi caso, las tablas no se crearon porque los objetos anotados con @Table no estaban anotados como @Entity


Esto funcionó para mí

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> <property name="url" value="jdbc:hsqldb:mem://productDb" /> <property name="username" value="sa" /> <property name="password" value="" /> </bean> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="generateDdl" value="true" /> <property name="showSql" value="true" /> </bean> </property>

Si cambio el valor a falso como este <property name="generateDdl" value="false" /> entonces obtengo SqlExceptionHelper:144 - Table not found in statement


Tal vez hasta tarde, pero hoy tuve el mismo problema cuando estaba escribiendo algunas pruebas para una aplicación heredada.

Estaba usando spring 2.5 , hibernate3 y la base de datos HSQL .

Para resolverlo, cambié la base de datos de HSQL a H2 y la org.springframework.jdbc.datasource.DriverManagerDataSource de datos de org.springframework.jdbc.datasource.DriverManagerDataSource a org.apache.commons.dbcp.BasicDataSource .

El spring-context.xml se ve así:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.h2.Driver"/> <property name="url" value="jdbc:h2:mem:test"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> </property> <property name="dataSource" ref="dataSource"/> </bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="dataSource" ref="dataSource"/> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <tx:annotation-driven/> ... </beans>

Persistence.xml se ve así:

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="TestPU" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> </properties> </persistence-unit> </persistence>

Espero que ayude.


Tenía exactamente el mismo problema ...

Comentando la propiedad

<!--property name="generateDdl" value="true"--> in the JpaAdapter,

pero estableciendo

<property name="hibernate.hbm2ddl.auto" value="create"/> in persistence.xml

trabajó para mi. Estoy usando hsqldb.

Observé en los registros que el modo estaba listo para actualizar sin importar lo que configuré en persistence.xml.

El valor en persistence.xml realmente se recogió pero nunca se aplicó. Estoy usando Spring 3.0.6 e Hibernate 4


intente lo siguiente:

<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="naveroTest" transaction-type="RESOURCE_LOCAL" /> </persistence>

<?xml version="1.0" encoding="UTF-8"?> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> </property> <property name="jpaProperties"> <props> ... <prop key="hibernate.hbm2ddl.auto">create-drop</prop> </props> </property> <property name="dataSource" ref="dataSource" /> </bean>

Esto funciona para mí


lamentablemente, ambas soluciones no funcionaron para mí :(. "hibernate.hbm2ddl.auto = update" también estaría bien, ya que debería crear las tablas si no están presentes.

Parece que todas las configuraciones de propiedad de persistence.xml se reconocen como nombre de usuario y el proveedor de bases de datos están configurados correctamente. Lamentablemente, las tablas no se crean al inicio, lo que hace que mi testcase falle ya que la instrucción SELECT arroja un error ...

Como puede ver, configuré la URL de conexión para utilizar una base de datos de archivos local, lo que me permite revisar el registro de la base de datos después de la ejecución de la prueba. Pero el archivo de registro todavía está vacío después de la ejecución de prueba, incluso si no se escribe ningún error en él :(.