`
loveyeah
  • 浏览: 7829 次
文章分类
社区版块
存档分类
最新评论

hibernate annotation的注意事项

阅读更多
在以前,我们在Java源代码中使用特殊的JavaDOC标签定义ORMapping规则,然后使用xDoclet生成映射规则文件(.hbm.xml)文件。现在有了Hibernate Annotation,连映射规则文件也不需要了,使用更加方便了。这里说说使用Hibernate Annotation时需要注意的一些地方。这些内容分散在Hiernate Annotation Reference文档和example中,与spring相关的部分则出现在Spring的文档中,这里把它们整理在一起。对我自己来说是起到备网的作用,对于其它Hibernate Annotation的用户,系统也能起到帮助查询的作用。

1. AnnotationConfiguration及配置映射规则。
在没有使用Hibnerate Annotation的使用,我们一般是使用org.hibernate.cfg.Configuration来配置和生成SessionFactory,使用Hibernate Annotation以后,要使用org.hibernate.cfg.AnnotationConfiguration类。该类在hibernate-annotation.jar,而不是hibernate3.jar中。

如果使用Spring + Hibernate的架构,要在Spring的配置文件里配置LocalSessionFactoryBean的时候,要记得定义property configurationClass。对于使用Annotation定义映射规则的类,在hibernate.cfg.xml文件中不能使用<mapping resource="..." />的形式,而要使用<mapping class="..." />的形式。LocalSessionFactoryBean的mappingResources不能调用AnnotationConfiguration的addClass和addPackage方法,因此使用Annotation定义映射规则的类,仍然要通过hibernate.cfg.xml文件来使AnnotationCongiguration载入它们的映射规则。使用Spring + Hibernate + Hibernate Annotation的情况下,LocalSessionFactoryBean的定义一般应该是:
    <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
         autowire="no" >
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
        <property name="dataSource" ref="myDataSource"/>
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
    </bean>

2. <mapping package="..." /> 与<mapping class="..." />
前一种形式只是载入制定包中package-info.java文件中定义的Annotation,而该包下的所有持久化类仍然需要通过后一种形式逐一载入它们的映射规则。

3. 使用sequence生成id
使用sequence生成id时,id属性的Annotation应该是:
    @Id
    @GeneratedValue (strategy=GenerationType.SEQUENCE, generator="SEQ_BOOK_ID")
需要注意的是,GeneratedValue中的generator不是sequence的名字,而是一个另外定义的SequenceGenerator的名字。这个SequenceGenerator应该定义在类的级别,因此比较完整的代码是想这个样子的:

@Entity
@AccessType("property")
@Table(name="BOOK")
@SequenceGenerator (name="SEQ_BOOK_ID", sequenceName="SEQ_BOOK_ID")
public class Book {

    private Long id;
   
    @Id
    @GeneratedValue (strategy=GenerationType.SEQUENCE, generator="SEQ_BOOK_ID")
    public Long getId() {
        return id;
    }

    ......



成功配置:

@SequenceGenerator(name="generator",sequenceName = "SEQ_SYSMGR_LOGIN_LOG")@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="generator")

4. AccessType
如果要Hibnerate使用get/set方法存取属性的话,一定要在类级别加上:
@AccessType("property")


5. NamedNativeQuery
使用NamedNativeQuery定义native SQL query的时候,即使只返回一个字段,也需要定义SqlResultSetMapping,见下面的例子:
@SqlResultSetMapping(name="keyWords", columns=@ColumnResult (name="key_word"))
@NamedNativeQuery (name="listKeyWords",
                   query="select distinct key_word from key_words order by key_word",
                   resultSetMapping="keyWords")


分享到:
评论

相关推荐

    Hibernate Annotation 唯一外键一对一双向关联

    通过阅读《Hibernate_annotation_1to1_foreignKey》文档或博客,你可以更详细地了解如何配置和使用这种关联,包括示例代码、注意事项以及可能遇到的问题和解决方案。理解并熟练运用这些知识,能帮助你在使用...

    hibernate-annotation

    四、最佳实践与注意事项 1. 合理使用注解:不是所有字段都需要注解,只注解那些需要映射到数据库的字段。 2. 保持代码整洁:避免在主键字段上同时使用`@Id`和`@GeneratedValue`,因为这通常是冗余的。 3. 注解与XML...

    hibernate annotation 3.40

    5. **注意事项** - 虽然注解简化了配置,但并不意味着它可以完全替代XML。在某些复杂场景下,例如级联操作或复杂的查询,XML配置仍然有其不可替代的作用。 - 注解的滥用可能导致代码过于拥挤,影响可读性。合理地...

    spring3、 hibernate4 配置声明式事务管理(annotation方式)

    五、注意事项 1. `@Transactional`注解的传播属性:默认为`PROPAGATION_REQUIRED`,表示如果当前没有事务,则新建一个;如果有事务,则加入到当前事务。 2. 事务的隔离级别:默认为`ISOLATION_DEFAULT`,可以根据...

    Hibernate继承映射(annotation)

    **五、注意事项** - 单表继承可能导致数据冗余,尤其是当子类的属性差异较大时。 - 如果子类很多,discriminator_column的值可能会增多,可能影响查询性能。 - 要注意处理多对一或一对多的关系,因为这些关系可能...

    annotation(注释)版本的hibernate

    2. 注意事项:虽然注解简化了配置,但过度依赖注解可能导致代码过于耦合,不利于重构。同时,对注解的合理使用和理解是提升开发效率的关键。 六、进阶话题 - 注解的其他用法:如@Temporal处理日期时间,@OneToOne...

    Hibernate组件映射(annotation/xml)

    五、注意事项 1. 组件映射的字段在数据库中可能需要额外的级联操作(如级联保存、删除)。 2. 如果组件类包含复杂的关联关系,可能会增加查询和更新的复杂性。 3. 当组件类需要独立表时,需要考虑其生命周期管理和...

    Hibernate多对多单向关联(annotation/xml)

    五、注意事项 1. `@JoinTable`中的`inverseJoinColumns`对应被关联表(Course)的主键,`joinColumns`对应关联表(Student)的主键。 2. `cascade`属性用于指定级联操作,如`CascadeType.ALL`表示添加、删除、更新...

    Android应用源码Hibernate4Android.zip

    五、注意事项与优化 1. 性能考虑:由于Hibernate4Android引入了额外的内存开销和反射操作,可能会影响应用性能。因此,对于性能敏感的场景,需要谨慎使用,并结合本地SQLite API进行优化。 2. 异步操作:考虑到...

    hibernate-release-4.2.12.Final libs

    5. 版本改进与注意事项: Hibernate 4.2.12.Final修复了一些已知问题,提高了性能和稳定性。在使用时,注意检查兼容性,尤其是与所使用的数据库驱动和JDK版本的兼容性。此外,合理配置缓存策略,避免内存溢出,监控...

    SpringAOP整合Hibernate并使用事务

    7. **注意事项** - 配置事务时,注意隔离级别、传播行为和回滚规则的设置,以满足不同的事务需求。 - 事务管理应尽可能局限于需要事务的代码块,避免不必要的性能开销。 - 使用AOP事务管理时,确保被事务管理的...

    struct+spring+Hibernate框架整合文档

    **SSH框架整合详解** SSH(Struts2、Spring、Hibernate)是Java开发中常见的三大开源框架,它们分别负责MVC...阅读提供的文档如`struts2-spring-hibernate.doc`和`SSH2整合.doc`,可以获取更详尽的步骤和注意事项。

    hibernate注解

    8. **注意事项** 虽然注解简化了配置,但过度依赖注解可能导致代码过于耦合。在大型项目中,可能需要结合XML配置以达到最佳的灵活性和可维护性。 总结来说,Hibernate注解是一种高效且强大的工具,它使ORM变得更加...

    QueryDsl自动生成QModel(注解扫描annotation-processor)

    #### 四、注意事项 - **编译问题**:由于 QModel 通常是动态生成的,所以在某些情况下可能会遇到编译问题。一种解决方案是将生成的 QModel 复制到可编译的目录中。 - **IDEA 配置**:如果需要在 IDEA 中生成元模型...

    JAVA简单的反射案例

    7. **注意事项与性能影响**: 尽管反射提供了强大的功能,但过度使用会导致代码复杂性增加,并可能影响性能,因为反射操作比直接调用方法更慢。因此,应谨慎使用反射,并尽量在必要时使用。 综上所述,“JAVA简单...

    JSP中springmvc配置validator的注意事项

    本文将深入探讨在JSP中配置Spring MVC的Validator时需要注意的事项。 首先,Spring MVC通过`&lt;mvc:annotation-driven&gt;`元素启用注解驱动的处理,这允许我们在控制器方法的参数上使用数据验证注解,如`@Size`、`@...

    编译时注解开发

    注意事项 - 使用注解处理器可能会增加编译时间,因此合理地使用注解是必要的。 - 由于注解处理器是在编译时执行的,所以它们无法访问运行时的信息,如动态配置。 总的来说,编译时注解开发是现代软件工程中一个...

Global site tag (gtag.js) - Google Analytics