hibernate注解

@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;
}
@Repository
public 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)

注解中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

注解指明被标注的变量不需要被映射到数据库表中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值