`

Hibernate4实战之Hibernate4注解零配置

 
阅读更多
@Entity,注册在类头上,将一个类声明为一个实体bean(即一个持久化POJO类) 。
@Table,注册在类头上,注解声明了该实体bean映射指定的表(table)。
@Id用来注册主属性,@GeneratedValue用来注册主属性的生成策略,@Column用来注册属性,@Version用来注册乐观锁,@Transient用来注册不是属性。
以上的@Id、@GeneratedValue、 @Column 、 @Version,可以用来注册属性,既可以写在Java类的属性上,也可以注册在属性对应的getter上。
@Transient注册在多余的属性或多余的getter上,但是必须与以上的@Column等对应。
@Column
标识属性对应的字段,示例:@Column(name=“userName")

java代码:
  1. @Column(  
  2.     name="columnName";                                (1)  
  3.     boolean unique() default false;                   (2)  
  4.     boolean nullable() default true;                  (3)  
  5.     boolean insertable() default true;                (4)  
  6.     boolean updatable() default true;                 (5)  
  7.     String columnDefinition() default "";             (6)  
  8.     String table() default "";                        (7)  
  9.     int length() default 255;                         (8)  
  10.     int precision() default 0// decimal precision   (9)  
  11.     int scale() default 0// decimal scale           (10)  
(1) name 可选,列名(默认值是属性名)
(2) unique 可选,是否在该列上设置唯一约束(默认值false)
(3) nullable 可选,是否设置该列的值可以为空(默认值false)
(4) insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)
(5) updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)
(6) columnDefinition 可选: 为这个特定列覆盖SQL DDL片段 (这可能导致无法在不同数据库间移植)
(7) table 可选,定义对应的表(默认为主表)
(8) length 可选,列长度(默认值255)
(8) precision 可选,列十进制精度(decimal precision)(默认值0)
(10) scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)
@Id,标识这个属性是实体类的唯一识别的值。
注意:这个注解只能标注单一列构成的主键,如tbl_grade那种有两个字段组成的联合主键由其他注解标识。
回忆*.hbm.xml:
<id name= "uuid">
<generator class= "assigned"/>
        </id>
@Id,只是标识这个属性是主键,但是并没有指出其生成策略,如上例中的assigned就是由程序员指定的生成策略。
如果仅仅写出@Id,即是使用assigned生成略,如:

java代码:
  1. @Id  
  2. @Column  
  3. private int uuid;  
  4. 如果想使用Oracle支持的sequence取主键,必须通过@GeneratedValue来指定生成策略,而由@SequenceGenerator指定如何使用sequence。  
  5. @Id  
  6. @Column  
  7. @GeneratedValue(  
  8. strategy = GenerationType.SEQUENCE,//使用sequence生成主键  
  9. generator =“generator“//引用下面名为gernator的生成策略  
  10. )  
  11. @SequenceGenerator(  
  12. name = “generator”,//定义名为generator的生成策略  
  13. allocationSize = 1//每次sequence加1  
  14. name=“seq_a”//引用名为seq_a的sequence  
  15. )  
  16. private int uuid;  
  17. @Version  
标识这个属性用来映射乐观锁的version
@Transient
标识这个属性不用持久化
@Embeddable【小对象的头上】
标识实体中可以定义一个嵌入式组件(embedded component)。组件类必须在类一级定义@Embeddable注解。
@Embedded【大对象的属性头上】
引用定义的小对象。
@Embeddable【小对象的头上】
标识实体中可以定义一个嵌入式组件(embedded component)。组件类必须在类一级定义@Embeddable注解。
注意:如果这个小对象作为复合主键,一定要实现Serializable接口。这并不是注解决定的,而是Hibernate的主键都需要实现Serializable接口。
@EmbeddedId 【大对象的属性头上】
引用定义的小对象作为主键。
注意:不需要再使用@Id注解。
 
标准的1:1
   
XML的配置

java代码:
  1. 1【tbl_product】:  
  2. <one-to-one name="info" cascade="all"/>  
  3. 1【tbl_product_info】:  
  4. <id name="uuid">  
  5. <generator class=“foreign【写死,使用外来生成策略】">  
  6. <param name=“property”>product【引用自己的Java属性名】 </param>  
  7. </generator>  
  8. </id>  
  9. <one-to-one name="product"/>  
注解的配置

java代码:
  1. 1【tbl_product】:  
  2. @OneToOne(cascade=CascadeType.ALL)  
  3. @PrimaryKeyJoinColumn  
  4. private ProductInfoModel info;  
  5. 1【tbl_product_info】:  
  6. @Id  
  7. @Column  
  8. @GeneratedValue(generator=“copy【引用生成策略】")  
  9. @GenericGenerator(name=“copy【定义生成策略】”,strategy=“foreign【写死,使用外来策略】”,parameters=@Parameter(name=“property”,value=“product【引用自己的Java属性】"))  
  10. private int uuid;  
  11. @OneToOne(mappedBy=“info【引用对方的Java属性】")  
  12. private ProductModel product;  
  13.    
标准的1:M
  
XML的配置
 

java代码:
  1. 1【tbl_parent】:  
  2.  <set name="children">  
  3.         <key column=“puuid【对方的数据库外键列名】"/>  
  4.         <one-to-many class=“cn.javass.model.c.ChildModel【对方的Java类名】"/>  
  5.   </set>  
  6. 多【tbl_child】:  
  7. <many-to-one name=“parent” column=“puuid【自己的数据库外键列名】"/>  
注解的配置
 

java代码:
  1. 1【tbl_parent】:  
  2. @OneToMany  
  3. @JoinColumn(name="puuid【对方的数据库外键列名】")  
  4. private Set<ChildModel> children = new HashSet<ChildModel>();  
  5. 多【tbl_child】:  
  6. @ManyToOne  
  7. @JoinColumn(name="puuid【自己的数据库外键列名】")  
  8. private ParentModel parent;  
  9.    
标准的1:M
 
 
XML的配置

java代码:
  1. <set name=“courses” table=“tbl_grade【联接表】">  
  2.         <key column=“suuid【联接表里代表自己的数据库字段名】"/>  
  3.         <many-to-many column=“cuuid【联接表里代表对方的数据库字段名】” class=“cn.javass.model.e.CourseMode【对方的类名】l"/>  
  4. </set>  
  5. 注解的配置  
  6. @ManyToMany  
  7. @JoinTable(  
  8. name=“tbl_grade【联接表】",  
  9. joinColumns=@JoinColumn(name="suuid【联接表里代表自己的数据库字段名】"),  
  10. inverseJoinColumns=@JoinColumn(name="cuuid 【联接表里代表对方的数据库字段名】” )  
  11. )  
  12. private Set<CourseModel> courses = new HashSet<CourseModel>();  
  13.    
标准的1:M
 
   
XML的配置
 

java代码:
  1. 1【tbl_product】:  
  2. <one-to-one name=“info” foreign-key=“puuid【对方的数据库外键列名】" cascade="all"/>  
  3. 1【tbl_product_info】:  
  4. <many-to-one name=“product” column=“puuid【自己的数据库外键列名】” unique=“true【写死】"/>  
注解的配置
 

java代码:
  1. 1【tbl_product】:  
  2. @OneToOne(cascade=CascadeType.ALL,mappedBy=“product【对方的Java类属性名 】")  
  3. private ProductInfoModel info;  
  4. 1【tbl_product_info】:  
  5. @OneToOne  
  6. @JoinColumn(name=“puuid【自己的数据库外键列名】")  
  7. private ProductModel product;  
标准的1:M
 
  
 
 
XML的配置

java代码:
  1. 1【tbl_parent】:  
  2. <set name=“children” table=“tbl_parent_child【联接表】">  
  3.         <key column=“puuid【联接表里代表自己的数据库列名】"/>  
  4.         <many-to-many column=“cuuid【联接表里代表对方的数据库列名】” unique=“true【写死】”  
  5. class=“cn.javass.model.d.ChildModel【对方的Java类名】"/>  
  6.         </set>  
  7. <join table=“tbl_parent_child【联接表】">  
  8.         <key column="cuuid【联接表里代表自己的数据库列名】"/>  
  9.         <many-to-one name="parent" column="puuid【联接表里代表对方的数据库列名】" unique="true【写死】"/>  
  10. </join>  
注解的配置

java代码:
  1. 1【tbl_parent】:  
  2. @OneToMany(mappedBy="parent【对方的Java类属性名 】")  
  3. private Set<ChildModel> children = new HashSet<ChildModel>();  
  4. 多【tbl_child】:  
  5. @ManyToOne  
  6. @JoinTable(  
  7. name=“tbl_parent_child【联接表】",  
  8. joinColumns=@JoinColumn(name="cuuid【联接表里代表自己的数据库字段名】"),  
  9. inverseJoinColumns=@JoinColumn(name="puuid【联接表里代表对方的数据库字段名】")  
  10. )  
  11. private ParentModel parent;  
 
标准的1:M
 
  
 
 
XML的配置

java代码:
  1. 1【tbl_product】:  
  2. <join table=“tbl_product_relation【联接表】">  
  3.         <key column=“puuid【联接表里代表自己的列名】"/>  
  4.         <many-to-one name=“course【自己的Java属性名】” column=“cuuid【联接表里代表对方的列名】” unique=“true【写死】"/>  
  5.  </join>  
注解的配置

java代码:
  1. 1【tbl_product】:  
  2. @ManyToOne  
  3. @JoinTable(  
  4. name=" tbl_product_relation 【联接表】",  
  5. joinColumns=@JoinColumn(name="suuid【联接表里代表自己的列名】"),  
  6. inverseJoinColumns=@JoinColumn(name="cuuid【联接表里代表对方的列名】",unique=true【写死】)  
  7. )  
  8. private CourseModel course;  
分享到:
评论

相关推荐

    Hibernate4实战资料

    Hibernate4 实战 零配置 Hibernate4实战之Hibernate4注解零配置

    Hibernate实战(第2版 中文高清版)

     2.1.3 Hibernate配置和启动   2.1.4 运行和测试应用程序   2.2 启动Java Persistence项目   2.2.1 使用Hibernate Annotations   2.2.2 使用Hibernate EntityManager   2.2.3 引入EJB组件   2.2.4 切换...

    Hibernate实战

    本课程讲述Java ORM框架Hibernate,内容包括:环境配置、Hibernate架构、SessionFactory、Session、映射文件、基于注解的配置、JPA、HQL查询、Criteria查询、关联映射、缓存、正逆向工程。

    hibernate基础

    内容提要  本书深入浅出地介绍了轻量级开源框架Hibernate3的... “使用Hibernate并非易事,本书透彻地阐述了Hibernate的原理与应用,并配有大量实战代码,能够使新用户非常轻松地入门。”  ——RegDeveloper.co.uk

    Spring3.x企业应用开发实战(完整版) part1

    4.10.2 使用注解配置信息启动Spring容器 4.10.3 自动装配Bean 4.10.4 Bean作用范围及生命过程方法 4.11 基于Java类的配置 4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置信息启动Spring容器 4.12 ...

    Spring.3.x企业应用开发实战(完整版).part2

    4.10.2 使用注解配置信息启动Spring容器 4.10.3 自动装配Bean 4.10.4 Bean作用范围及生命过程方法 4.11 基于Java类的配置 4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置信息启动Spring容器 4.12 ...

    Spring+3.x企业应用开发实战光盘源码(全)

     第16章:有别于一般书籍的单元测试内容,本书以当前最具实战的JUnit4+Unitils+ Mockito复合测试框架对如何测试数据库、Web的应用进行了深入的讲解。  第17章:以一个实际的项目为蓝本,带领读者从项目需求分析、...

    Spring Data JPA 原理与实战2021年

    │ 开篇词 勇敢走出舒适区,突破自己的技术瓶颈.mp4 ...│ 20 Spring JPA 中的 Hibernate 加载过程与配置项是怎么回事?.mp4 │ 21 Peritence Context 所表达的核心概念是什么?.mp4 │ 22 Seio

    陈开雄 Spring+3.x企业应用开发实战光盘源码.zip

     第7章:对如何使用基于AspectJ配置AOP的知识进行了深入的分析,这包括使用XML Schema配置文件、使用注解进行配置等内容。  第8章:介绍了Spring所提供的DAO封装层,这包括Spring DAO的异常体系、数据访问模板等...

    spring3_MVC实战

    最近的项目在用Spring3,涉及到了基于注解的MVC,事务管理,与hibernate的整合开发等内容,我打算写一个系列出来,记录下这个痛苦但又充满成就感的过程----网上实在太难找能让新手快速理解掌握的文章了 我打算从这几...

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    3.1 应用场景 在一些开源框架里,如Spring,Struts,Hibernate,MyBatis等,应用程序会提供一个配置文件如xml文件或者properties,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射机制...

    JAVA高并发高性能高可用高扩展架构视频教程

    企业常用框架springMVC基于注解+xml配置方式实现链接 WEB服务器优化之Tomcat7性能调优 JVM概述 Java开发技术之(项目工程的日志管理) 数据库连接池原理详解 Java企业级框架之核心技术(反射) Java-Base64算法(创新_...

    容灾项目从入门到实战视频.rar

    │ 26-补充-关于hibernate中一对一唯一主键关联的补充-1.mp4 │ 27-vue的路由-1.mp4 │ 28-shiro介绍和quickstart样例项目-1.mp4 │ 29-quickstart项目的创建和日志系统的分析-1.mp4 │ 30-使用自定义realm-1.mp4 │...

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

    深入浅出Struts2(附源码)

    第26章零配置 316 26.1 准备工作 316 26.2 注解 317 26.2.1 @Result注解 317 26.2.2 @Results注解 318 26.2.3 @Namespace注解 318 26.2.4 @ParentPackage注解 319 26.3 CodeBehind插件 319 26.4 小结 321 ...

Global site tag (gtag.js) - Google Analytics