`

从Hibernate unknown entity说起

阅读更多

在Spring+Hibernate企业级应用中,会用到Hibernate annotation。 在开发过程中常常会遇到unknown entity 的error。这个问题有以下几个原因:

1. @Entity  引入错误。

    在ORM annotation中有两个Entity: org.hibernate.annotations.Entity 和 javax.persistence.Entity。

    在bean中应使用后一个。

import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.Entity;// this is the RIGHT one

@Entity
@Table(name="MyTable")
public class MyBean implements Serializable

 2. 缺少相应的配置。

   a) 在hibernate配置文件中(eg. hibernate.cfg.xml) 需要相应的配置:

 

<mapping class="com.mycompany.model.MyBean" />

    这样在sessionFactory中才能找得到

 

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="configLocation">
			<value>classpath:hibernate.cfg.xml</value>
		</property>
		<property name="configurationClass">
			<value>org.hibernate.cfg.AnnotationConfiguration</value>
		</property>
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
    <value>
     hibernate.dialect=#{jdbcProperties.dialect}
     hibernate.show_sql=true
     hibernate.hbm2ddl.auto=update//自动生成数据库表,如果表存在就更新数据库表字段但是不会删除表中的数据
     hibernate.format_sql=true
     hibernate.cache.use_second_level_cache=false
     hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
    </value>
   </property>
	</bean>

 或者

 

	<jee:jndi-lookup id="dataSource" jndi-name="java:/ds" />

	<bean id="entityInterceptor"
		class="org.hibernate.EmptyInterceptor" />


	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="configLocation">
			<value>classpath:hibernate.cfg.xml</value>
		</property>
		<property name="configurationClass">
			<value>org.hibernate.cfg.AnnotationConfiguration</value>
		</property>
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<ref bean="hibernateProperties" />
		</property>
		<property name="entityInterceptor">
			<ref local="entityInterceptor" />
		</property>
	</bean>

	<bean id="hibernateProperties"
		class="org.springframework.beans.factory.config.PropertiesFactoryBean">
		<property name="properties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.Oracle10gDialect
				</prop>
				<prop key="hibernate.show_sql">false</prop>
				<prop key="hibernate.c3p0.minPoolSize">5</prop>
				<prop key="hibernate.c3p0.maxPoolSize">20</prop>
				<prop key="hibernate.c3p0.timeout">600</prop>
				<prop key="hibernate.c3p0.max_statement">50</prop>
				<prop key="hibernate.c3p0.testConnectionOnCheckout">
					false
				</prop>
			</props>
		</property>
	</bean>

 在企业级开发中,分别部署,或者以plugin的形式部署不同的Eclipse project是常见的现象,为了遵从开闭原则(OCP:Open-Closed Principle -- Software entities should be open for extension,but closed for modification), 可以用spring bean的形式来添加ORM。只需新建一个sessionFactory即可。

<bean id="amSessionFactory" parent="sessionFactory"
    	class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

         <property name="annotatedClasses">
	        <list>
	            <value>com.mycompany.model.MyBean</value>
                    <value>com.mycompany.model.MyBean2</value>                 
               </list>
	    </property>
          <!--  or below configuration -->
           <property name="packagesToScan">
	        <list>
	            <value>com.mycompany.model</value>
	        </list>
	    </property>
	<!--	<property name="packagesToScan" value="com.mycompany.*.model" > -->
 	</bean>

 这样就可以实现部分功能的可插拔性。

分享到:
评论

相关推荐

    如何使用Hibernate Tools生成Entity Bean

    如果你需要,可以使用DDL(数据定义语言)生成器从数据库模式创建HBM(Hibernate Mapping)文件。 3. **逆向工程**:在IDE的“Hibernate”菜单中,选择“Reverse Engineering”选项。在这里,你需要选择你的...

    Hibernate逆向生成entity和hbm.xml文件

    在开发过程中,为了减少手动编写实体类(Entity)和对应的hbm.xml配置文件的工作量,Hibernate提供了一个逆向工程工具,可以基于现有数据库结构自动生成这些代码。 实体类是Java对象,它们代表数据库中的表,而hbm....

    Hibernate3自动生成entity

    本篇文章将详细讲解如何使用Hibernate3在MyEclipse环境中自动生成实体类(Entity)以及相关的映射文件,从而快速构建数据访问层。 首先,我们需要创建一个新的Web工程。在MyEclipse中,通过File &gt; New &gt; Dynamic ...

    java entity

    通过使用Java Persistence API (JPA) 或 Hibernate 这样的ORM框架,我们可以利用注解将Java类直接与数据库表关联,简化了传统的SQL操作。最常见的用于定义实体的注解是`@Entity`,它标识一个Java类为JPA的实体。例如...

    hibernate自动生成

    在描述中提到的“hibernate自动生成”是指Hibernate提供的代码生成工具,能够帮助我们快速创建Entity(实体)、映射文件(Mapping Files)以及DAO(数据访问对象)等关键组件。这一特性使得开发过程更加便捷,减少了...

    利用hibernate自动生成hbm.xml文件和entity类.doc

    Hibernate 反向工程是指使用 Hibernate 工具将数据库表结构反向生成对应的 Entity 类和 hbm.xml 文件的过程。这种方法可以大大简化开发过程,提高开发效率。 二、 Hibernate 反向工程的步骤 1. 切换到 MyEclipse ...

    hibernate-annotations-3.4.0.GA and hibernate-entitymanager-3.4.0.GA

    《Hibernate注释与枚举映射详解》 Hibernate作为Java领域中最流行的ORM(对象关系映射)框架之一,极大地简化了数据库操作。本篇将详细探讨`hibernate-annotations-3.4.0.GA`和`hibernate-entitymanager-3.4.0.GA`...

    hibernate-entitymanager-3.4.0.GA

    【标题】"hibernate-entitymanager-3.4.0.GA" 是一个与Java持久化框架Hibernate Entity Manager相关的库,这个版本号表明它是2009年左右发布的一个稳定版本。Hibernate Entity Manager是JPA(Java Persistence API)...

    hibernate3 hibernate3

    1. 实体(Entity):在Hibernate中,实体代表数据库中的表,是Java类的一个实例。通过在类上使用@Entity注解,我们可以声明一个类为实体。 2. 表映射(Mapping):Hibernate使用XML或注解方式将实体类映射到数据库...

    hibernate aip hibernate aip

    总的来说,Hibernate AIP涵盖了从项目初始化、数据库设计、对象关系映射、数据操作到性能调优的全过程。通过熟练掌握这些知识点,开发者可以高效地在Java项目中整合和利用数据库资源,实现更简洁、可维护的代码。在...

    hibernate和MySQL的jar

    2. **实体类(Entity)**: 在Hibernate中,一个Java类可以被标记为实体类,代表数据库中的一个表。通过使用`@Entity`注解,我们可以将类与数据库表关联起来。 3. **配置文件(Hibernate.cfg.xml)**: 这个XML文件...

    hibernate基础jar包

    5. Hibernate实体类:开发者定义的Java类,通过@Entity注解标记为数据库表的映射对象,属性通过@Column注解与表的字段对应。 6. Session和Transaction:在Hibernate中,Session是数据库会话的代表,负责对象的持久...

    hibernate annotation hibernate3

    《Hibernate注解与Hibernate3深度解析》 在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇将深入探讨Hibernate 3版本中的注解使用,帮助开发者理解如何利用注解进行...

    hibernate学习资料大全

    Hibernate 使用Java类来代表数据库中的表,通过注解如@Entity、@Table、@Id等来定义实体类与数据库表的关系。了解并熟练运用这些注解是提高开发效率的关键。 4. **SessionFactory和Session**: SessionFactory是...

    hibernate5相关jar包

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了Java应用中的数据存取工作。本压缩包包含了与Hibernate 5相关的jar包,这些jar包是构建和运行基于...

    Hibernate入门案例源码

    【Hibernate入门案例源码】是针对初学者设计的一份教程,旨在帮助理解并掌握Java持久化框架Hibernate的基础应用。Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使开发者可以...

    Hibernate实践例子程序

    Hibernate 是一个开源的O/R mappimg的框架,基于JDBC提供了一种持久性数据管理的方案,相对于EntityBean来说是相当轻量级的。由于Hibernate是基于 JDBC的,所以它的数据库查寻的能力相对于CMP来说也是异常强大的,...

Global site tag (gtag.js) - Google Analytics