[Hibernate]Hibernate4实体注解方法

来源:互联网 发布:淘宝运营培训班视频 编辑:程序博客网 时间:2024/06/06 05:56

Hibernate4使用注解关系映射说明:

实体类注解(放在实体类的上面):

@Entity
@Table(name = “coupon”, catalog = “agriculture_oto”) //name属性为表名,catalog为数据库名称,可以省略。
或者:
@Entity(name = “coupon”) //nane属性为表名

属性和列的注解(放在实体类中的每一个属性上面):

主键注解:
@Id //id标识
@GeneratedValue 主键生成,如果是int自增则使用:@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = “主键ID”, unique = true, nullable = false, length = 32) //name为列名称,其他可以省略。
column如果不写则默认为小写第一个字母的属性

其他列注解则使用:
@Column(name = “列名称”, nullable = false, length = 50)

关系映射说明:

多对一映射:
@ManyToOne(targetEntity=[映射外键实体类].class,fetch=FetchType.EAGER) //FetchType的值为:懒加载/及时加载
@JoinColumn(name=”memberId”) //当前所在实体类所对应表的对应列,此列的作用是关联 private Member member;

小技巧:通过hibernate来进行插入操作的时候,不管是一对多、一对一还是多对多,都只需要记住一点,在哪个实体类声明了外键,就由哪个类来维护关系。在保存数据时,总是先保存的是没有维护关联关系的那一方的数据,后保存维护了关联关系的那一方的数据

—–以下摘自别人的博客——

@OneToMany(mappedBy=”room”)  —>  OneToMany指定了一对多的关系,mappedBy=”room”指定了由多的那一方来维护关联关系,mappedBy指的是多的一方对1的这一方的依赖的属性,
(注意:如果没有指定由谁来维护关联关系,则系统会给我们创建一张中间表)
@LazyCollection(LazyCollectionOption.EXTRA)  —>  LazyCollection属性设置成EXTRA指定了当如果查询数据的个数时候,只会发出一条 count(*)的语句,提高性能

@ManyToOne(fetch=FetchType.LAZY)  —> ManyToOne指定了多对一的关系,fetch=FetchType.LAZY属性表示在多的那一方通过延迟加载的方式加载对象(默认不是延迟加载)
@JoinColumn(name=”rid”)  —>  通过 JoinColumn 的name属性指定了外键的名称 rid (注意:如果我们不通过JoinColum来指定外键的名称,系统会给我们声明一个名称)

@OneToOne(mappedBy=”person”)  —>  指定了OneToOne的关联关系,mappedBy同样指定由对方来进行维护关联关系

@OneToOne  —>  OnetoOne指定了一对一的关联关系,一对一中随便指定一方来维护映射关系,这里选择IDCard来进行维护
@JoinColumn(name=”pid”)  —>  指定外键的名字 pid

@ManyToMany   —> ManyToMany指定多对多的关联关系
@JoinTable(name=”t_teacher_course”, joinColumns={ @JoinColumn(name=”cid”)},
inverseJoinColumns={ @JoinColumn(name = “tid”) })  —>  因为多对多之间会通过一张中间表来维护两表直接的关系,所以通过 JoinTable 这个注解来声明,
name就是指定了中间表的名字,JoinColumns是一个 @JoinColumn类型的数组,表示的是我这方在对方中的外键名称,我方是Course,所以在对方外键的名称就是 rid,
inverseJoinColumns也是一个 @JoinColumn类型的数组,表示的是对方在我这放中的外键名称,对方是Teacher,所以在我方外键的名称就是 tid

@OneToMany(mappedBy=”admin”)  —>  OneToMany关联到了AdminRole这个类,由AdminRole这个类来维护多对一的关系,mappedBy=”admin”
@LazyCollection(LazyCollectionOption.EXTRA)  

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

@Column注解属性说明:
(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就是由程序员指定的生成策略。

0 0
原创粉丝点击