Hibernate注解

Hibernate属性注解

@Id

必须,定义了映射到数据库表中的主键的属性,一个实体类可以有一个或者多个属性被映射为主键,可置于主键属性或者getXxxx()前面;

注意:如果有多个属性定义为主键属性,该实体类必须实现serializable接口。


@GeneratedValue

@GeneratedValue(strategy = GenerationType.AUTO,generator = ""):可选,用于定义主键生成策略

strategy表示主键生成策略,取值有:

1.GenerationType.AUTO:根据底层数据库自动选择(默认)

2.GenerationType.IDENTITY:主键由数据库自动生成(主要是自动增长型) 

3.GenerationType.SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。

4.GenerationType.TABLE:使用一个特定的数据库表格来保存主键。总和@TableGenerator使用。


@Column:将属性映射到列,使用该注解覆盖默认值,@Column描述数据库表中该字段的详细定义,这对于根据JPA注解生成数据库表结构的工具非常有用。常用属性:

name:可选,表示数据表中该字段的名称

nullable:可选,表示该字段是否允许为null,默认为true

unique:可选,表示该字段是否是唯一标识,默认为false

length:可选,表示该字段的大小,仅对String类型字段有效,默认值255,如果是主键不要使用默认值

insertable:可选,表示在ORM框架执行插入操作时,该字段是否应出现在insert语句中,默认为true

updateable:可选,表示ORM框架执行更新时,该字段是否应该出现在update语句中,默认为true。对于一经创建就不可以更改的字段,该属性非常有用。


@Transient:可选,表示属性并非是一个到数据库表的字段的映射,ORM框架将忽略该属性。


@Embedded:注释属性的,表示该属性的类是嵌入类。同时嵌入类也必须标注@Embeddable注解。


@EmbeddedId:使用嵌入式主键类实现复合主键。嵌入式主键类必须实现Serializable接口、必须有默认的public无参数的构造方法、必须覆盖equals和hashCode方法。使用方法参考如下代码:(在使用过程中发现一个问题,springboot默认创建数据库的时候会使用engine=MyISAM,此时如果PersonPK中的id和sid使用默认长度,那么会创建失败,需要设置id和sid的长度。如果设置engine=InnoDB,则创建成功。

复合主键类

package com.springboot.springbootlearning.dataobject;

//Person主键类

import javax.persistence.Column;
import javax.persistence.Embeddable;
import java.io.Serializable;
@Embeddable
public class PersonPK implements Serializable{

    private static final long serialVersionUID = -8667734571914799662L;

    @Column(length = 18)
    private String id; //身份证号

    @Column(length = 11)
    private String sid; //学号

    public PersonPK(){}

    public PersonPK(String id, String sid) {
        this.id = id;
        this.sid = sid;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }
}

实体类

package com.springboot.springbootlearning.dataobject;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
@Entity
public class Person {

    @EmbeddedId
    private PersonPK personPK;
    private String major;
    private String gender;
    public Person() {
    }
    public Person(PersonPK personPK, String major, String gender) {
        this.personPK = personPK;
        this.major = major;
        this.gender = gender;
    }
    public PersonPK getPersonPK() {
        return personPK;
    }
    public void setPersonPK(PersonPK personPK) {
        this.personPK = personPK;
    }
    public String getMajor() {
        return major;
    }
    public void setMajor(String major) {
        this.major = major;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
}
package com.springboot.springbootlearning.repository;

import com.springboot.springbootlearning.dataobject.Person;
import com.springboot.springbootlearning.dataobject.PersonPK;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PersonRepository extends JpaRepository<Person,PersonPK>{
    
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值