hibernate注解
来源:互联网 发布:电脑软件出现乱码 编辑:程序博客网 时间:2024/06/06 14:55
@Entity@Table(name = "tbl_answer")public class Answer extends CommonBean{ @Column(name = "answer") private String answer; @ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.LAZY,optional="false") @JoinColumn(name = "questionID") private Question question;}
@Repositorypublic abstract class CommonDao<T extends CommonBean> implements ICommonDao<T> { @Autowired protected SessionFactory sessionFactory;}
@Entity 注解将一个类声明为实体Bean
@Id 注解声明了该实体Bean的标识属性
@Table 为实体Bean指定对应数据库表,目录和schema的名字。包含一个schema和一个catelog属性,使用@UniqueConstraints 可以定义表的唯一约束。
@Table(name="tbl_sky", uniqueConstraints ={@UniqueConstraint(columnNames={"month", "day"})})
@Column 注解将属性映射到列。
@Column( name="columnName"; (1) 列名 unique=default false; (2) 是否在该列上设置唯一约束 nullable=default true; (3) 列可空? insertable=default true; (4) 该列是否作为生成 insert语句的一个列 updatable=default true; (5) 该列是否作为生成 update语句的一个列 columnDefinition=default""; (6) 默认值 table=default "";(7) 定义对应的表(deault 是主表) length=default 255; (8) 列长度 precision=default 0; // decimalprecision (9) decimal精度 scale=default 0; // decimal scale (10) decimal长度)
@ManyToOne注解中CascadeType用法:
cascade(级联)
级联在编写触发器时经常用到,触发器的作用是当 主控表信息改变时,用来保证其关联表中数据同步更新。若对触发器来修改或删除关联表相记录,必须要删除对应的关联表信息,否则,会存有脏数据。所以,适当的做法是,删除主表的同时,关联表的信息也要同时删除,在hibernate中,只需设置cascade属性值即可。
CascadeType.PERSIST:级联新增(又称级联保存):对order对象保存时也对items里的对象也会保存。对应EntityManager的presist方法
例子:只有A类新增时,会级联B对象新增。若B对象在数据库存(跟新)在则抛异常(让B变为持久态)
CascadeType.MERGE:级联合并(级联更新):若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法
例子:指A类新增或者变化,会级联B对象(新增或者变化)
CascadeType.REMOVE:级联删除:对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法
例子:REMOVE只有A类删除时,会级联删除B类;
CascadeType.REFRESH:级联刷新:获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据 (用的比较少)
CascadeType.ALL:以上四种都是
综上所述:一般的,用CascadeType.MERGE:级联合并(级联更新)就能达到级更新同时又稳定不报错。
通过fetch属性指定加载方式,有两个值:
FetchType.LAZY:延迟加载
FetchType.EAGER:急加载,在加载一个实体的时候,其中定义是急加载的的属性(property)和字段(field)会立即从数据库中加载
optional属性是规定一个数据能否为空
@OneToOne,@OneToMany,@ManyToMany
mappedBy:
1>只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
2>mappedBy标签一定是定义在被拥有方的,他指向拥有方;
3>mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系,当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的;
4>mappedBy跟joinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表。
@JoinColumn注解与@ManyToOne注解结合使用,来指定保存实体具体关系的配置,指定数据库表中的保存的关联字段,它要标注在实体属性上。
@Transient注解指明被标注的变量不需要被映射到数据库表中
- hibernate 注解
- hibernate注解
- hibernate注解
- hibernate注解
- Hibernate注解
- Hibernate 注解
- Hibernate注解
- hibernate注解
- hibernate 注解
- hibernate注解
- hibernate注解
- Hibernate注解
- hibernate注解
- hibernate注解
- hibernate注解
- Hibernate 注解
- hibernate注解
- Hibernate注解
- java中重载与重写的区别
- spring boot学习(十三)SpringBoot缓存(EhCache 2.x 篇)
- IK为交流电机,DK为直流电机,RK为可逆式正反转电机
- HDU1075_What Are You Talking About_stl的map
- Intellij IDEA 自动生成 serialVersionUID
- hibernate注解
- 原创
- simple-spa 一个简单的单页应用实例
- 数据结构----串
- LintCode之Add Digits
- Eclipse使用及错误提示
- 各种的监听
- 华为OJ——第一个只出现一次的字符
- 除了努力,运气也很重要