【问题标题】:Not able to read orm.xml in multiple module project in jpa无法在 jpa 的多个模块项目中读取 orm.xml
【发布时间】:2015-04-23 11:42:13
【问题描述】:

我已经使用 maven 配置了多模块项目,所以我正在构建将在整个项目中使用的通用模块。 现在的问题是我在 META-INF/domain/orm 目录中有我的Category.orm.xml 文件,当我尝试从中读取命名查询BC_READ_ALL_CATEGORIES 时,它会抛出以下错误。

如果我尝试从注释中读取相同的命名查询,则没有问题发生。

请看看我在哪里弄错了谢谢...

Exception in thread "main" java.lang.IllegalArgumentException: No query defined for that name [BC_READ_ALL_CATEGORIES]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.buildQueryFromName(AbstractEntityManagerImpl.java:788)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createNamedQuery(AbstractEntityManagerImpl.java:925)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:291)
at com.sun.proxy.$Proxy36.createNamedQuery(Unknown Source)
at com.ornamentbazzar.common.catalog.dao.CategoryDaoImpl.readAllCategories(CategoryDaoImpl.java:53)

目录结构

这是 applicationContext-persistent.xml

 <?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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd
           http://www.springframework.org/schema/tx  
           http://www.springframework.org/schema/tx/spring-tx.xsd">

    <context:component-scan
        base-package="com.ornamentbazzar.*" />
    <!-- this is also used we can used this also -->
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/retailer" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceXmlLocation" value="classpath:* META-INF/persistence.xml" />
        <property name="dataSource" ref="dataSource" />
        <property name="persistenceUnitName" value="ornament" />
        <property name="packagesToScan" value="com.ornamentbazzar.*" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true" />
                <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
            </bean>
        </property>
    </bean>


    <bean id="category" class="com.ornamentbazzar.common.catalog.dao.CategoryDaoImpl"></bean>


</beans>      

persistent.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_2_0.xsd"
    version="2.0">


    <persistence-unit name="ornament" transaction-type="RESOURCE_LOCAL">
        <mapping-file>META-INF/domain/orm/Category.orm.xml</mapping-file>
        <!-- <mapping-file>META-INF/product.orm.xml</mapping-file> -->
        <class>com.ornamentbazzar.common.catalog.entity.Category</class>
        <class>com.ornamentbazzar.common.catalog.entity.CategoryMapper</class>
        <class>com.ornamentbazzar.common.catalog.entity.CategoryMapperPK</class>
        <class>com.ornamentbazzar.common.catalog.entity.CategoryAttribute</class>
        <class>com.ornamentbazzar.common.catalog.entity.CategoryMapper</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"></property>
            <property name="hibernate.transaction.flush_before_completion"
                value="false" />
            <property name="hibernate.connection.autocommit" value="true" />
            <property name="hibernate.cache.region.factory_class"
                value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.id.new_generator_mappings" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
        </properties>
    </persistence-unit>
</persistence>

category.orm.xml

 <?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
    version="2.0">

    <named-query name="BC_READ_ALL_CATEGORIES">
        <query>SELECT category FROM com.ornamentbazzar.common.catalog.entity.Category category ORDER BY category.id</query>
    </named-query>


</entity-mappings>

测试应用

    public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext-persistence.xml");
        CategoryDao categoryDao = (CategoryDao) applicationContext.getBean("category");
        System.out.println(categoryDao.readAllCategories().size());
    }
}

【问题讨论】:

    标签: spring hibernate maven-3 jpa-2.0 persistence.xml


    【解决方案1】:

    您的 persistence.xml 仅指单个 *.orm.xml 文件。要读取多个,您需要列出多个。

    您的persistence.xml 仅指一个。你有多个地方吗?

        <mapping-file>META-INF/domain/orm/Category.orm.xml</mapping-file>
        <!-- <mapping-file>META-INF/product.orm.xml</mapping-file> -->
    

    【讨论】:

    • Amnet 是的,我知道,但问题是,我的测试程序本身无法读取 *.orm.xml 命名查询我无法弄清楚为什么这无法读取
    • Amnet 是的,我确实有多个 orm 文件,但首先我尝试使用一个 orm 文件测试名称查询是否正在读取,问题是它甚至没有使用一个 orm 文件读取。
    猜你喜欢
    • 2022-01-24
    • 2016-02-22
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 2014-07-01
    • 2015-12-02
    • 2012-11-29
    • 2020-07-05
    相关资源
    最近更新 更多