HibernateJpaVendorAdapter de generateDdl ne pas modifier les tables de
Je suis en train d'élaborer un site web à l'aide de Printemps+JPA+mise en veille prolongée. Dans la persistance de configuration de JPA (+Hibernate), je suis de réglage de la HibernateJpaVendorAdapter de generateDdl attribut de vrai et en fait, de nouvelles entités correctement créer la nouvelle table dans la base de données.
Une fois que la table a été créée, mais, si j'ajoute un attribut de l'entité, je m'attends à des HibernateJpaVendorAdapter pour modifier la table et ajouter la colonne. Ce n'est pas le cas et c'est bizarre parce que dans le Java AbstractJpaVendorAdapter de setGenerateDdl documentation de la méthode il y a: "choisir de générer DDL après l'EntityManagerFactory a été initialisé, la création/mise à jour toutes les tables."
JPA+Hibernate:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${db.driverClassName}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="showSql" value="${db.showSql}" />
<property name="generateDdl" value="${db.generateDdl}" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter" ref="jpaAdapter" />
<property name="jpaProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<property name="dataSource" ref="dataSource" />
</bean>
persistence.xml:
<?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="m8tsPU" />
</persistence>
Je fais quelque chose de mal?
OriginalL'auteur satoshi | 2012-01-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir un contrôle plus fin sur DDL génération par l'établissement de la mise en veille prolongée-propriété spécifique directement:
Alternativement, vous pouvez utiliser
create-drop
au lieu deupdate
, depuisupdate
peut causer des problèmes dans certains cas. Notez, cependant, que la DDL mise à jour n'est pas prévu pour une utilisation en production.OriginalL'auteur axtavt
Alternativement, vous pouvez également exprimer les mêmes propriétés à l'aide de
jpaPropertyMap
:OriginalL'auteur Robert Hunt
Peut-être à la fin, mais aujourd'hui, j'ai eu le même problème quand j'ai écrit quelques tests pour une application héritée.
Le problème ne se produit pas seulement lorsque vous utilisez
generateDdl
des biens, mais aussiHSQL
est utilisé.Pour le résoudre j'ai modifié la base de données de
HSQL
àH2
et la source de données à partir deorg.springframework.jdbc.datasource.DriverManagerDataSource
àorg.apache.commons.dbcp.BasicDataSource
.L'spring-context.xml ressemble:
L'persistence.xml ressemble:
J'espère que cela aide.
OriginalL'auteur Nel Gonzalez