Hibernate注解开发之属性级别的注解

回顾

Hibernate注解开发之类级别的注解

属性级别注解

@Id

    必须, 表示映射到数据库表中的主键的属性, 一个实体类可以有一个或多个属性被映射为主键, 可置于主键属性或者getXxx()方法上

    如果一个类中有多个属性被定义为主键, 则该实体类必须实现Serializable接口

@GeneratedValue(strategy = "")

    ① strategy = GeneratedValue.AUTO  //根据底层数据库自动选择(默认)

@Id //设置为主键
@GeneratedValue //主键自增
private int sid; //学号

    ② strategy = GeneratedValue.IDENTITY  //根据数据库的identify字段自动生成(主键需要为整型)

    ③ strategy = GeneratedValue.SEQUENCE  //使用sequence来决定主键的取值

    ④ strategy = GeneratedValue.TABLE  //使用指定表来决定主键的取值(需要结合@TableGenerator(name = "指定表名"))

 

如果主键为字符串类型

@Id //设置为主键
@GeneratedValue(generator = "sid")  //由于是主键的字符串类型, 无法使用默认自增, 此时需要指定主键生成器
@GenericGenerator(name = "sid", strategy = "assigned")  //使用hibernate的注解自定义主键生成器, assigned为手动赋值
@Column(length = 8)  //默认的长度为255, 对于主键来说太长, 需要重新指定
private String sid; //学号

 

@Column(可将属性映射到列)

    name: 可选, 表示数据库表中该字段的名称, 默认情形和属性名称一致

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

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

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

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

@Embedded(加在属性上, 表示这是一个嵌入类): 需要配合@Embeddable

@EmbeddedId(加在属性上, 表示这是一个复合主键类): 需要配合@Embeddable

@Id //设置为主键
@EmbeddedId  //标注在属性上
private StudentPK pk; //学号

复合主键类StudentsPK

@Embeddable
public class StudentsPK implements Serializable {

    private static final long serialVersionUID = 6632444697825110476L;
    @Column(length = 18)
    private String id;  //身份证号
    @Column(length = 8)
    private String sid;  //学号

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

    public StudentsPK() {
    }

    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 boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        StudentsPK studentPK = (StudentsPK) o;
        return id.equals(studentPK.id) &&
                sid.equals(studentPK.sid);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, sid);
    }
}

@Transient

    可选, 表示该属性并非一个到数据库表的字段的映射, ORM框架将忽略该属性, 如果一个属性并非数据表中的字段映射, 就务必将其标示为@Transient, 否则ORM框架默认其注释为@Basic

猜你喜欢

转载自blog.csdn.net/ip_JL/article/details/85680175
今日推荐