Hibernate注解配置

646人浏览 / 0人评论

JPA与 Hibernate关系

JPA是JavaEE的标准结构,Hibernate是实现 但Hibernate的功能是JPA的超集 Hibernate通过hibernate-annotation hibernate-entitymanagerhibernate-core三个组件来实现

hibernate.cfg.xml

<session-factory>
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>
        <property name="connection.url">jdbc:mysql://localhost:3306/work></property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.username">root</property>
        <property name="connection.password">696969</property>

        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
</session-factory>

注解详解

表级注解

  • @Entity 映射实体类
    • @Entity(name="tableName") name : 可选, 对应数据库的一个表,如果表名和实体类名相同则可以省略
    • 注意:使用@Entity时必须制定实体类的主键属性(就是要有ID)

  • @Table(name=““,catalog=””,schema="")
    • @Table@Entity配合使用只能标注在实体类的class定义处表示对应的数据库的信息
    • name: 可选映射表的名称,默认表名和实体类名一致
    • catalog:可选, 表示Catalog名称,默认为Catalog("")
    • schema: 可选表示Schema名称,默认为Schema("")
  • @Embeddable @Embeddable表示一个非Entity类,可以嵌入到另一个Entity类中作为属性而存在。

属性级注解

  • 添加方式

    • 写在属性上面
    • 写在属性的get访问器上面
  • @Id

    • 必须的,定义了映射到数据库表主键的属性,一个实体类可以有一个或多个属性被定义为主键
    • 注意:
    • 1、如果有多个属性定义为主键属性,该实体类必须实现serializable接口。
    • 2、使用MySQL时,当字符串作为Id的时候必须指定length

  • @SequenceGenerator
  • @GeneratedValue

    • @GeneratedValue(strategy = GenerationType,generator = "")
    • 1、GenerationType.AUTO: 根据底层数据库自动选择
    • 2、GenerationType.IDENTITY 根据数据库的Identity字段生成
    • 3、GenerationType.SEQUENCE 使用SEQUENCE来决定主键生成策略
    • 4、GenerationType.TABLE 使用指定的表来决定主键的取值
    • 结合@TableGenerator使用
    • 自定义主键生成策略
        @GeneratedValue(generator = "sid")
        @GenericGenerator(name = "sid", strategy = "assigned")
    
    • assigned表示手动输入
  • @Column

    • name: 可选, 表示数据库表中该字段的名称,默认和属性名一致
    • nullable:可选,表示该字段是否允许为空,默认为true
    • unique:可选,表示该字段是否是唯一标识,默认为false。
    • length:可选,表示该字段的大小仅对String类型的字段有效,默认值为255。(如果为主键 则不能使用默认值)
    • insertable: 可选, 表示在ORM框架执行插入操作时,该字段是否应出现INSERT语句中默认为true
    • updateable:可选, 表示在ORM执行更新操作时,该字段是否出现在UPDATE语句中,默认为true。对于一经创建就不可更改的字段,该属性非常有用,比如brithday字段。

  • @Embedded 嵌入类的属性
  • @EmbeddedId 联合主键
  • @Lob
  • @Version
  • @Basic
  • @Transient 可选,表示该属性并不需要映射到数据库的字段,ORM将会忽略该属性

  • @Transient@Basic 是相反的

  • @Temporal 指定映射数据库中的日期事件类型

关系映射级别注解

1、一对一单向外键

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="teachers")

2、一对一双向外键关联

被控方需添加

@OneToOne(mappedBy="主控方属性名")

3、一对一单向外键联合主键

既是联合主键

4、多对一单向外键关联

@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
@JoinColumn(name="cid",referencedColumnName="CID")

5、一对多单向外键关联

6、一对多双向外键关联

7、多对多单向外键关联

8、多对多双向外键关联

关系型数据库的三总映射关系

  1. 一对一
  2. 一对多
  3. 多对多