物竞天择 适者生存

我们不是代码的搬运工,我们只生产代码

Hibernate注解配置

Hibernate注解配置

标签: Hibernate 注解


JPA与 Hibernate关系

JPA是JavaEE的标准结构,Hibernate是实现
但Hibernate的功能是JPA的超集
Hibernate通过`hibernate-annotation` `hibernate-entitymanager`和`hibernate-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=””)
    @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、多对多双向外键关联

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

一对一
一对多
多对多
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注