在 persistence.xml hibernate 中移除 <class> 标签的使用

Posted

技术标签:

【中文标题】在 persistence.xml hibernate 中移除 <class> 标签的使用【英文标题】:remove the uses of <class> tag in persistence.xml hibernate 【发布时间】:2013-05-27 04:03:12 【问题描述】:

我有一个关于 Spring 3.1.1 Hibernate 4.1.1 jsf 2.1.6 的演示项目

***请忽略标签中“

在persistance.xml 文件中,我使用如下配置:


< ?xml version="1.0" encoding="UTF-8"?>
< persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">

    <persistence-unit name="app-persistance"
        transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <!-- ********* HAS Entries ********* -->
                <class>com.myapp.domain.classA</class>
                <class>com.myapp.domain.classB</class>
                <!-- ******More Domain classes here ***-->
< /persistence-unit>

< /persistence>

我的 applicationContext.xml 快照如下:


< bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" scope="singleton">
        
        <property name="persistenceUnitName" value="app-persistance" />
        <property name="dataSource" ref="dataSource" />
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">$hibernate.dialect</prop>
                <prop key="hibernate.hbm2ddl.auto">$hibernate.hbm2ddl.auto</prop>
                <prop key="hibernate.show_sql">$hibernate.show_sql</prop>
                <prop key="javax.persistence.validation.mode">none</prop>
                <prop key="javax.persistence.sharedCache.mode">all</prop>
                <prop key="hibernate.search.default.directory_provider">org.hibernate.search.store.impl.FSDirectoryProvider
                </prop>
                <prop key="hibernate.search.default.indexBase">c:/lucene/indexes</prop>
            </props>
        </property>
        
    </bean>

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

现在,每次我创建任何域类时,我都必须在 persistence.xml 中添加一个条目 所有类都已正确注释。

领域类的快照:

@Indexed
@Entity
@Table(name = "USER")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class User implements Serializable 
    @Id
    @DocumentId
    @Column(name = "ID", length = 20)
    @Field(index = Index.YES)
    private String id;
        ................
        .................
  

应该怎么做,以便创建任何新的域类、persistence.xml 标记条目并且在 DB 中自动创建 SQL 表

因为我已经在 applicationContext.xml 中添加了以下内容

< prop key="hibernate.hbm2ddl.auto">$hibernate.hbm2ddl.auto < /prop>

< prop key="hibernate.show_sql">$hibernate.show_sql < /prop>

【问题讨论】:

【参考方案1】:

entityManagerFactory bean 声明中包含以下属性

<property name="packagesToScan" value="com.myapp.domain"/>

并从 persistence.xml 中删除所有类声明

【讨论】:

以上是关于在 persistence.xml hibernate 中移除 <class> 标签的使用的主要内容,如果未能解决你的问题,请参考以下文章

Karaf webbundle 无法找到 persistence.xml

Maven 阴影插件替换 persistence.xml

JPA 使用替代“persistence.xml”

persistence.xml 不同的事务类型属性

如何在没有 persistence.xml 的情况下配置 Spring?

在persistence.xml 的jta-data-source 中放入啥?