hibernate之注解3

来源:互联网 发布:js防水防水涂料 编辑:程序博客网 时间:2024/05/24 05:02

@Transient
可选,表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性,如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic
(即:当将一个属性设置@Transient注解时,表结构中并没有显示此属性)

关系映射注解

  • 一对一单向外键
  • 一对一双向外键关联
  • 一对一双向外键联合主键
  • 多对一单向外键关联
  • 一对多单向外键关联
  • 一对多双向外键关联
  • 多对多单向外键关联
  • 多对多双向外键关联

    一对一单向外键关联
    用到注解:@OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name=”“,unique=true)
    详情

这2个注解写到主类中,cascade表示级联关系,CascadeType.ALL表示全级联关系,包括级联删除,级联添加,级联更新等 ;JoinColumn表示将被控类的主键键写到主控类中充当外键,unique表示唯一,应该先保存外键对象,再保存主键对象

注意:注解要么全部写在字段上,要不全部写在getXX()方法上,千万不能混合使用否则会报如下错误 org.hibernate.MappingException: Could not determine type for: com.txr.oto.fk.IdCard, at table: Student

org.hibernate.AnnotationException: No identifier specified for entity 后来分析错误原因是因为在对VipOperatorDto进行对象关系映射的时候忘记加上主键@Id了。这个错是hibernate的annotation报的错,所以肯定是对象上加的注解有问题

注意 主键类和外键类都要session.save; 先保存外键类

一对一双向外键

  • 主控方的配置同一对一单向外键关联
  • 但是被控方要标注 @OneToOne(mappedBy=”card”)
  • 双向关联,必须设置mappedBy属性。因为双向关联只能交给一方去控制,不可能在双方都设置外键保存关联关系,否则双方都无法保存。
  • 详情

一对一双向外键联合主键

  • 要借助主键类来实现,所以要创建主键类,主键类必须要实现serializable接口,重写hashCode()和equals()方法
  • 主键类要写@Embeddable
  • 实体类的联合主键属性上添加@EmbeddedId

多对一单向外键
- 在多数方添加@ManyToOne(cascade={CascadeType.All},fetch=FetchType.EAGER)
@JoinColumn(name=”“,referencedColumnName=”“)
fetch抓取策略,FetchType.EAGER表示积极的
JoinColumn(多方持有一方的引用,一方的外键用name表示,referencedColumnName表示外键映射到表里的字段)
详情

两个类都要加载,否则会出现错误,类如org.hibernate.exception.constraintviolationexception: could not execute statementat

原创粉丝点击