2012-03-09 22 views
0

私はspring-data-jpa(実際に初めてentityManagerを使用しています) を見ていますが、エラーは見られませんでしたが、entityManagerはエンティティクラスAccountのテーブルを生成していないようです。ここではMavenのメイン/リソース/ META-INFフォルダ内の自分のアプリケーションのコンテキスト(プロジェクト・モデル-config.xmlが)どの時点でHibernateがテーブルを生成しますか?

<bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath:mysql.hibernate.properties</value> 
      <value>classpath:mysql.jdbc.properties</value> 
      <!--<value>classpath:liquibase.properties</value>--> 
     </list> 
    </property> 
</bean> 


<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${jdbc.driverClassName}"/> 
    <property name="url" value="${jdbc.url}"/> 
    <property name="username" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
</bean> 

<bean id="transactionManger" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
</bean> 

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <!--<property name="generateDdl" value="true" />--> 
     </bean> 
    </property> 
    <property name="packagesToScan" value="com.bla.bla.model.domain"/> 
    <property name="persistenceUnitName" value="default"/> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> 
      <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
     </props> 
    </property> 
</bean> 


<jpa:repositories base-package="com.bla.bla.model.dao"/> 

のpersistence.xml(メイン/リソースプロジェクトモデル-config.xmlのの兄弟であります/ META-INF)も、この

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 
<persistence-unit name="default" transaction-type="RESOURCE_LOCAL" /> 
</persistence> 

性質mysql.hibernate.properties/ mysql.jdbc.properties

hibernate.dialect=org.hibernate.dialect.MySQLDialect 
hibernate.show_sql=false 
hibernate.format_sql=false 
hibernate.hbm2ddl.auto=create 

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.username=root 
jdbc.password=mypass 
jdbc.url=jdbc:mysql://localhost:3306/projectjava 

パッケージcom.bla.bla.model.domainは、エンティティのアカウントが含まれているように見えます

import java.io.Serializable; 
    import java.util.Date; 
    import javax.persistence.Basic; 
    import javax.persistence.Column; 
    import javax.persistence.Entity; 
    import javax.persistence.Id; 
    import javax.persistence.Table; 


@Entity 
@Table(name = "account") 
public class Account implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @Basic(optional = false) 
    @Column(name = "account_id") 
    private Long ID; 
    @Basic(optional = false) 
    @Column(name = "name") 
} 

成功したビルド後(maven)にはテーブルが生成されません。私は単純なアサートを使って単一のテストを追加しました。

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:META-INF/project-model-config.xml"}) 
public class AccountDAOTest { 

@Test 
public void testSetup(){ 
    Assert.assertTrue(true); 
} 
} 

エンティティを生成する方法についてちょっと混乱しています。私はなぜそれができないのか分かりません。 誰でも問題をここで確認できますか?

+0

** project-model-config.xmlとは何ですか?** ** applicationContext **をロードする必要がありますか? – ManuPK

+0

@ManuPK正確さの欠如を申し訳ありません。それは私の投稿の最初の部分で表示しているのと同じ 'applicationContext'です。私はそれをもっとはっきりと編集しました。 –

+0

あなたは以下の答えを試しましたか?私はコメントや他の答えが表示されませんでした。もしそれが有用だったら、回答をアップホート/受け入れてください。 – ManuPK

答えて

0

エンティティマッピングがロードされたときにHibernateがテーブルを生成します。あなたの場合は、テーブルを生成する必要があることを意味します。

これはjpaVendorAdapterで春の問題のように見えます。JIRAです。 また、SOの質問hereがあります。

アプリケーションコンテキストでjpaVendorAdapterが必要かどうかはわかりません。私はそれを使わなかったし、春にも見つけなかった。API docs。これは必須ではなく、デフォルトのvalueに初期化されます。

このマッピングを削除し、コードを実行してみてください。

関連する問題