Java 使用Hibernate所用注解


  1. @Entity
    注:若出现@Entity过时的警告则表示导入的@Entitiy错误,我们所用的应该是 import javax.persistence.Entity; 而不是 @org.hibernate.annotations.Entity @Entity表明此类是一个实体类(数据库的一个表),需要与@Id结合使用,默认将类名作为表名,若需要更改表明,需使用@Table注解。
映射规则:
 2. 实体类必须用 @javax.persistence.Entity 进行注解;
 3. 必须使用 @javax.persistence.Id 来注解一个主键;
 4. 实体类必须拥有一个 public 或者 protected 的无参构造函数,之外实体类还可以拥有其他的构造函数;
 5. 实体类必须是一个顶级类(top-level class)。一个枚举(enum)或者一个接口(interface)不能被注解为一个实体;
 6. 实体类不能是 final 类型的,也不能有 final 类型的方法;
 7. 如果实体类的一个实例需要用传值的方式调用(例如,远程调用),则这个实体类必须实现(implements)java.io.Serializable 接口。
  1. @Table
    @Table用于声明此对象映射到数据库的数据表,通过它可以为实体指定表(talbe)。
常用的两个属性: 
1、name 用来命名 当前实体类 对应的数据库 表的名字 
2、uniqueConstraints 用来批量命名唯一键,其作用等同于多个:@Column(unique = true)
例:
@Table(
        name = "DEPARTMENT",
        uniqueConstraints = {@UniqueConstraint(columnNames = {"DEPT_NO"})}
)
  1. @OneToMany
服务的对像需是Set,如果Set使用泛型(T)定义元素类型,则不需要指定关联的目标实体类型;否则必须指定目标实体类。如果关系是双向的,则 mappedBy必须使用该 元素来指定作为关系所有者的实体的关系字段或属性。
  1. @Temporal
1、如果在某类中有Date类型的属性,数据库中存储可能是'yyyy-MM-dd hh:MM:ss'要在查询时获得年月日,在该属性上标注@Temporal(TemporalType.DATE) 会得到形如'yyyy-MM-dd' 格式的日期。
2、如果在某类中有Date类型的属性,数据库中存储可能是'yyyy-MM-dd hh:MM:ss'要获得时分秒,在该属性上标注 @Temporal(TemporalType.TIME) 会得到形如'HH:MM:SS' 格式的日期。
3、如果在某类中有Date类型的属性,数据库中存储可能是'yyyy-MM-dd hh:MM:ss'要获得'是'yyyy-MM-dd hh:MM:ss',在该属性上标注 @Temporal(TemporalType.TIMESTAMP) 会得到形如'HH:MM:SS' 格式的日期
  1. @JoinColumn
    表示对应表有个外键被当前表引用。
  2. @Lob
@Lob表示当前列用于存储大对象数据的数据类型,有两种LOB,称为BLOB和CLOB。BLOB用于存储二进制数据,而CLOB用于存储文本数据。
CLOB -字符大对象将存储大文本数据
BLOB –二进制大对象用于存储二进制数据,如图像、音频或视频
  1. @GeneratedValue
    @GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键、@GeneratedValue提供了主键的生成策略。
@GeneratedValue注解有两个属性,分别是strategy和generator
generator属性的值是一个字符串,默认为"",其声明了主键生成器的名称
(对应于同名的主键生成器@SequenceGenerator和@TableGenerator)。

strategy属性提供四种值:
-AUTO主键由程序控制, 是默认选项 ,不设置就是这个
-IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式
-SEQUENCE 通过数据库的序列产生主键, MYSQL  不支持
-Table 提供特定的数据库产生主键, 该方式更有利于数据库的移植