【问题标题】:Maven module - persistence lostMaven 模块 - 持久性丢失
【发布时间】:2014-02-13 14:45:33
【问题描述】:

我在 spring-data、spring security、jpa、hibernate 项目上与 maven 合作:

在我的项目(pom 类型)中,我在 POM 文件中定义了所有依赖项 -> OK 在第一个模块(jar 类型)中,我有所有包: - 休眠包 - 存储库包 - 服务包 - 等等...

在第二个模块(战争类型)中,我有: - 控制器包 - 数据库配置 - 安全配置 - 等等...

在第二个模块的 POM 中,我添加了第一个模块的依赖。

当我运行第二个模块时,我得到了这个错误:

java.lang.IllegalArgumentException: Not an managed type: class com.mc.appcontacts.domain.hibernate.User

但是如果我将 hibernate 包从第一个模块移动到第二个模块,它可以工作!

是否可以将hibernate包保留在第一个模块中?

因为如果我添加依赖于第一个模块的其他模块(例如我的示例中的第二个),我必须在所有新模块中复制 hibernate 包......不是很酷(主要是如果数据库发生变化结构)

感谢您的帮助

【问题讨论】:

标签: spring hibernate maven jpa


【解决方案1】:

是的!!

我找到了!

我继续: 在我的 applicationContext.xml 中,我导入了一个数据库资源:

<!--  included Spring contexts -->   
<import resource="classpath:META-INF/contacts/contexts/db_context.xml"/>

在 db_context.xml 中,我声明了一个 JPA entityManagerFactory(我指的是 persistence.xml):

<!-- Declare a JPA entityManagerFactory -->
<bean id="entityManagerFactory"  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceXmlLocation" value="classpath:META-INF/contacts/hibernate/persistence.xml" />
    <property name="persistenceUnitName" value="hibernatePersistenceUnit" />
    <property name="jpaVendorAdapter" ref="hibernateVendor" />
</bean>

在persistence.xml中,我定义了一个映射文件(ORM.xml):

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="hibernatePersistenceUnit" transaction-type="RESOURCE_LOCAL">
<properties>
    <property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
      .....
</properties>
<mapping-file>META-INF/contacts/hibernate/orm.xml</mapping-file>
</persistence-unit>
</persistence>

在这个 orm.xml 文件中,我定义....什么都没有:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.0" 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">
<persistence-unit-metadata>
    <persistence-unit-defaults>
    </persistence-unit-defaults>
</persistence-unit-metadata>
   </entity-mappings>

但是如果没有 maven 模块(只有一个 maven 项目(包含所有包和 conf 文件)或者如果每个模块中都存在 hibernate 包,它就可以工作!!

所以这是我的新 orm.xml :

 <?xml version="1.0" encoding="UTF-8"?>
 <entity-mappings version="2.0" 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">

<package>com.mc.appcontacts.domain.hibernate</package>

<entity class="Client">
    <table name="client" />
 </entity>
 <entity class="Contact">
    <table name="contact" />
 </entity>
 <entity class="SystemUser">
    <table name="system_user" />
 </entity>
 <entity class="User">
    <table name="user" />
 </entity>
 <entity class="Userlogin">
    <table name="userlogin" />
 </entity>
 <entity class="Userauth">
    <table name="userauth" />
 </entity>
<!-- <persistence-unit-metadata>
    <persistence-unit-defaults>
    </persistence-unit-defaults>
</persistence-unit-metadata> -->
   </entity-mappings>

它适用于我只在 ContactCore 模块中定义的休眠包!

【讨论】:

    猜你喜欢
    • 2015-01-30
    • 1970-01-01
    • 2011-04-23
    • 2012-06-01
    • 2014-05-07
    • 1970-01-01
    • 2019-08-09
    • 2010-12-29
    • 2016-03-18
    相关资源
    最近更新 更多