• 常用的hibernate annotation标签使用说明


    1.注释可以写在成员变量之上,也可以写在getter方法之上,但一定要保持统一性!

    2.常用的hibernate annotation标签如下:

    @Entity       --注释声明该类为持久类。将一个Javabean类声明为一 个实体的数据库表映射类,最好实现序列化.
    @Table(name="DAT_USER_INFO")    --持久性映射的表(表名="DAT_USER_INFO).@Table是类一级的注解,定义在@Entity下,为实体bean映射表.
    @Id      --该标签用于标识数据实体的主键
    @GeneratedValue     --定义主键生成方式,通常和@ org.hibernate.annotations.GenericGenerator一同使用,用于生成主键。
    @GenericGenerator   --Hibernate提供的主键构造器。通常与@GeneratedValue配合使用。 
    @Column     --用于表示实体属性对应数据库表的哪个字段。
    @Transient --用于标识不在数据库表中映射的属性。(实体类有的成员属性,但数据库中没有) 
    @Temporal(TemporalType.TIMESTAMP)--声明时间格式 
    @Enumerated --声明枚举 
    @Version --声明添加对乐观锁定的支持 
    @OneToOne --可以建立实体bean之间的一对一的关联 
    @OneToMany --可以建立实体bean之间的一对多的关联 
    @ManyToOne --可以建立实体bean之间的多对一的关联 
    @ManyToMany --可以建立实体bean之间的多对多的关联 
    @Formula --一个SQL表达式,这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等) 
    @OrderBy --Many端某个字段排序(List)

    3.参数解释如下:

    @table 参数:

    name – 用于指定表名,表名统一用大写字母,单词之间用下划线分隔。

    @column  参数:

    name – 字段名,数据库中的字段名,默认为属性名,建议手工指定,字段名统一使用大写字母

    nullable -boolean 值,表示该属性是否可以为空,默认为true。

    insertable -boolean 值,表示该属性是否在insert语句中包含,默认为true。

    updatable -boolean 值,表示该属性是否在update 语句中包含,默认为true。

    length -int值,表示该属性值的长度,通常用于字符串属性,默认为255。

    unique -boolean 值,表示该属性值是否建立唯一索引,默认为false。

     @GeneratedValue  参数

    strategy -构造方式;generator -构造器名称。

    样例:

    1、 由Hibernate自动生成主键:@GeneratedValue(strategy=GenerationType.AUTO)

    2、 根据主指构造器生成主键:@GeneratedValue(generator="assigned")

     @GenericGenerator  参数

    name -构造器名称,在@GeneratedValue 中引用;strategy -构造方式。

    样例:

    1.      手工指定的主键:
    @GeneratedValue(generator="assigned") 
    @GenericGenerator(name = "assigned", strategy = "assigned")

    2.      从Sequence 获取主键:
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="TASK_SEQ")
    @SequenceGenerator(name="TASK_SEQ",sequenceName="SEQ_GROUP_SEND_TASK")

    @OneToMany,@ManyToOne,@OneToOne,@ManyToMany

    Cascade { CascadeType.PERSIST (级联新建) ,CascadeType.REMOVE  (级联删除),CascadeType.REFRESH (级联刷新),CascadeType.MERGE   (级联更新)中选择一个或多个。,CascadeType.ALL}
     
    fetch : 1)LAZY(默认值)采用延时加载,查询数据时,不一起查询关联对象的数据。而是当访问关联对象时(如:getStudnets()时)才触发相应的查询操作,获取关联对象数据。

                     2)EAGER:是在查询数据时,也直接一起获取关联对象的数据。

    1>只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性; 
    2>mappedBy标签一定是定义在被拥有方的,他指向拥有方; 

    4.关于主键自动生成问题

    Hibernate 能够出色地自动生成主键。其生成规则由@GeneratedValue设定的.

    JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO. 
    TABLE:使用一个特定的数据库表格来保存主键。 
    SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 
    IDENTITY:主键由数据库自动生成(主要是自动增长型) ----Oracle 不支持自增字段
    AUTO:主键由程序控制。 

    在指定主键时,如果不指定主键生成策略,默认为AUTO。 

    @Id相当于@Id@GeneratedValue(strategy = GenerationType.AUTO)

     
    对于oracle想使用各自的Sequence,设置如下:        
    @GeneratedValue(strategy = GenerationType.AUTO,generator="PROMOTION_SEQ")        
    @SequenceGenerator(name="PROMOTION_SEQ",sequenceName="PROMOTION_SEQ")  
     
    同时,也可采用uuid,native等其它策略.(相关用法,上网查询) 

    5.相关例子如下

    1.@Formula             

    /**
     * 参与评审的商品表
     * 
     */
    @Entity
    @Table(name = "MARKET_REVIEW_PRODUCT")
    @AttributeOverride(column = @Column(name = "REVIEW_PRODUCT_ID"), name = "id")
    public class ReviewProduct  extends IdEntity {
        private static final long serialVersionUID = 1L;
        
        private ProductReview review;  //商品评审基本信息    
        private Integer agreeAmount;    //同意结果统计
    @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "REVIEW_ID") public ProductReview getReview() { return review; } public void setReview(ProductReview review) { this.review = review; } @Formula("(select count(*) from MARKET_PRODUCT_REVIEW_RESULT t where t.REVIEW_ID=REVIEW_ID and t.REVIEW_RESULT='1' )") public Integer getAgreeAmount() { return agreeAmount; } public void setAgreeAmount(Integer agreeAmount) { this.agreeAmount = agreeAmount; } }
  • 相关阅读:
    js_类数组转化为数组
    js_立即执行函数
    react-router详解
    闭包_详解
    react_生命周期执行顺序
    Git-Gitlab-Genkins持续集成
    java 通用查询
    java-JDBC事务
    java中的session和cookie实现购物车的结算和清空
    servlet服务器
  • 原文地址:https://www.cnblogs.com/mcahkf/p/7216580.html
Copyright © 2020-2023  润新知