在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>
这样就可以实现部分功能的可插拔性。
分享到:
相关推荐
如果你需要,可以使用DDL(数据定义语言)生成器从数据库模式创建HBM(Hibernate Mapping)文件。 3. **逆向工程**:在IDE的“Hibernate”菜单中,选择“Reverse Engineering”选项。在这里,你需要选择你的...
在开发过程中,为了减少手动编写实体类(Entity)和对应的hbm.xml配置文件的工作量,Hibernate提供了一个逆向工程工具,可以基于现有数据库结构自动生成这些代码。 实体类是Java对象,它们代表数据库中的表,而hbm....
本篇文章将详细讲解如何使用Hibernate3在MyEclipse环境中自动生成实体类(Entity)以及相关的映射文件,从而快速构建数据访问层。 首先,我们需要创建一个新的Web工程。在MyEclipse中,通过File > New > Dynamic ...
通过使用Java Persistence API (JPA) 或 Hibernate 这样的ORM框架,我们可以利用注解将Java类直接与数据库表关联,简化了传统的SQL操作。最常见的用于定义实体的注解是`@Entity`,它标识一个Java类为JPA的实体。例如...
在描述中提到的“hibernate自动生成”是指Hibernate提供的代码生成工具,能够帮助我们快速创建Entity(实体)、映射文件(Mapping Files)以及DAO(数据访问对象)等关键组件。这一特性使得开发过程更加便捷,减少了...
Hibernate 反向工程是指使用 Hibernate 工具将数据库表结构反向生成对应的 Entity 类和 hbm.xml 文件的过程。这种方法可以大大简化开发过程,提高开发效率。 二、 Hibernate 反向工程的步骤 1. 切换到 MyEclipse ...
《Hibernate注释与枚举映射详解》 Hibernate作为Java领域中最流行的ORM(对象关系映射)框架之一,极大地简化了数据库操作。本篇将详细探讨`hibernate-annotations-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)...
1. 实体(Entity):在Hibernate中,实体代表数据库中的表,是Java类的一个实例。通过在类上使用@Entity注解,我们可以声明一个类为实体。 2. 表映射(Mapping):Hibernate使用XML或注解方式将实体类映射到数据库...
总的来说,Hibernate AIP涵盖了从项目初始化、数据库设计、对象关系映射、数据操作到性能调优的全过程。通过熟练掌握这些知识点,开发者可以高效地在Java项目中整合和利用数据库资源,实现更简洁、可维护的代码。在...
2. **实体类(Entity)**: 在Hibernate中,一个Java类可以被标记为实体类,代表数据库中的一个表。通过使用`@Entity`注解,我们可以将类与数据库表关联起来。 3. **配置文件(Hibernate.cfg.xml)**: 这个XML文件...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了Java应用中的数据存取工作。本压缩包包含了与Hibernate 5相关的jar包,这些jar包是构建和运行基于...
5. Hibernate实体类:开发者定义的Java类,通过@Entity注解标记为数据库表的映射对象,属性通过@Column注解与表的字段对应。 6. Session和Transaction:在Hibernate中,Session是数据库会话的代表,负责对象的持久...
《Hibernate注解与Hibernate3深度解析》 在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇将深入探讨Hibernate 3版本中的注解使用,帮助开发者理解如何利用注解进行...
Hibernate 使用Java类来代表数据库中的表,通过注解如@Entity、@Table、@Id等来定义实体类与数据库表的关系。了解并熟练运用这些注解是提高开发效率的关键。 4. **SessionFactory和Session**: SessionFactory是...
【Hibernate入门案例源码】是针对初学者设计的一份教程,旨在帮助理解并掌握Java持久化框架Hibernate的基础应用。Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使开发者可以...
Hibernate 是一个开源的O/R mappimg的框架,基于JDBC提供了一种持久性数据管理的方案,相对于EntityBean来说是相当轻量级的。由于Hibernate是基于 JDBC的,所以它的数据库查寻的能力相对于CMP来说也是异常强大的,...