Reveja
Desenvolvimento de anotações do Hibernate e outras anotações de nível
Anotação de nível de atributo
@Eu iria
Obrigatório, o que significa que o atributo mapeado para a chave primária na tabela do banco de dados. Uma classe de entidade pode ter um ou mais atributos mapeados para a chave primária, que podem ser colocados no atributo de chave primária ou no método getXxx ()
Se vários atributos em uma classe são definidos como a chave primária, a classe de entidade deve implementar a interface serializável
@GeneratedValue (strategy = "")
① estratégia = GeneratedValue.AUTO // Selecionar automaticamente de acordo com o banco de dados subjacente (padrão)
@Id //设置为主键
@GeneratedValue //主键自增
private int sid; //学号
② estratégia = GeneratedValue.IDENTITY // gerado automaticamente de acordo com o campo de identificação do banco de dados (a chave primária deve ser um inteiro)
③ estratégia = GeneratedValue.SEQUENCE // Use a sequência para determinar o valor da chave primária
④ estratégia = GeneratedValue.TABLE // Use a tabela especificada para determinar o valor da chave primária (precisa ser combinada com @TableGenerator (name = "nome da tabela especificada"))
Se a chave primária for um tipo de string
@Id //设置为主键
@GeneratedValue(generator = "sid") //由于是主键的字符串类型, 无法使用默认自增, 此时需要指定主键生成器
@GenericGenerator(name = "sid", strategy = "assigned") //使用hibernate的注解自定义主键生成器, assigned为手动赋值
@Column(length = 8) //默认的长度为255, 对于主键来说太长, 需要重新指定
private String sid; //学号
@Column (atributos podem ser mapeados para colunas)
nome: Opcional, representa o nome do campo na tabela do banco de dados, a situação padrão é igual ao nome do atributo
anulável: opcional, indica se o campo pode ficar vazio, o padrão é verdadeiro
exclusivo: opcional, indica o tamanho do campo, válido apenas para campos do tipo String, o valor padrão é 255 (se for uma chave primária, o valor padrão não pode ser usado)
inserível: Opcional, indica se o campo deve aparecer na instrução insert quando a estrutura ORM executa a operação de inserção, o padrão é verdadeiro
atualizável: opcional, indica se o campo deve aparecer na instrução de atualização quando a estrutura ORM executa uma operação de atualização. O padrão é verdadeiro. Este atributo é muito útil para campos que não podem ser alterados depois de criados, como o campo de aniversário (aniversário)
@Embedded (adicionado ao atributo, indicando que esta é uma classe incorporada): Precisa cooperar com @Embeddable
@EmbeddedId (adicionado ao atributo, indicando que esta é uma classe de chave primária composta): Precisa cooperar com @Embeddable
@Id //设置为主键
@EmbeddedId //标注在属性上
private StudentPK pk; //学号
Classe de chave primária composta 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
Opcional, isso significa que o atributo não é um mapeamento para um campo da tabela de banco de dados e a estrutura ORM irá ignorar esse atributo. Se um atributo não for um mapeamento de campo na tabela de dados, ele deve ser marcado como @Transient, caso contrário, a estrutura ORM será padronizada para sua anotação @Basic