疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Hibernate 注解总结全集


 

    总结一些最近在实体类中用到的Hibernate注解,用自己的话加以解释,有可能不标准,仅供参考

  日后还会补充:

  实体类注解:@Entity

  实体类映射到数据库表@Table()

  以Json格式保存到表:@JsonIgnoreProperties(ignoreUnknown=true)

  例:

  [java]

  @Entity

  @Table(name = "projects")

  @JsonIgnoreProperties(ignoreUnknown=true)

  public class Project {

  }

  Id标示:@Id

  列自增:@GeneratedValue

  这两个注解我一般成对使用

  例:

  [java]

  @Id

  @GeneratedValue

  public Integer getId() {

  return id;

  }

  一对一映射:@OneToOne

  一对多映射:@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")

  例:

  [java]

  @OneToMany(fetch = FetchType.LAZY, mappedBy = "project")

  public List getFundDetails() {

  return this.fundDetails;

  }

  多对一映射:@ManyToOne(fetch = FetchType.LAZY)

  @JoinColumn(name = "city_id", nullable = false)

  例:

  [java]

  @ManyToOne(fetch = FetchType.LAZY)

  @JoinColumn(name = "category_id", nullable = false)

  @JsonIgnore//

  public ProjectCategory getProjectCategory() {

  return this.projectCategory;

  }

  注意:有的时候Json格式保存的属性一对多映射会引起栈溢出所以加上注解@JsonIgnore

  详情见:StackOverflowError栈溢出错误

  @Column

  属性映射到列:@Column()

  例:

  [java]

  @Column(name="user_qq")

  public String getUserQQ() {

  return this.userQQ;

  }

  (1)

  name 可选,列名(默认值是属性名)

  (2)

  unique 可选,是否在该列上设置唯一约束(默认值false)

  (3)

  nullable 可选,是否设置该列的值可以为空(默认值false)

  (4)

  insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)

  (5)

  updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)

  (6)

  columnDefinition 可选: 为这个特定列覆盖SQL DDL片段 (这可能导致无法在不同数据库间移植)

  (7)

  table 可选,定义对应的表(默认为主表)

  (8)

  length 可选,列长度(默认值255)

  (8)

  precision 可选,列十进制精度(decimal precision)(默认值0)

  (10)

  scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)

  @Transient这个用的不是太好.我的理解是不映射到数据表中

  例:

  [java]

  @Transient

  String getLengthInMeter() {

  ...

  }