duansky'weblog

统计

留言簿(3)

友情链接

阅读排行榜

评论排行榜

Hibernate annotation 使用笔记

 1 @Entity                          -- 声明为一个实体bean   
 2 @Table(name = " promotion_info " )    -- 为实体bean映射指定表(表名 = " promotion_info)   
 3 @Id                              -- 声明了该实体bean的标识属性   
 4 @GeneratedValue                  -- 可以定义标识字段的生成策略.   
 5 @Transient                       -- 将忽略这些字段和属性,不用持久化到数据库   
 6 @Column(name = " promotion_remark " ) -- 声明列(字段名 = " promotion_total " ) 属性还包括(length = 200等)   
 7 @Temporal(TemporalType.TIMESTAMP) -- 声明时间格式   
 8 @Enumerated                      -- 声明枚举   
 9 @Version                         -- 声明添加对乐观锁定的支持   
10 @OneToOne                        -- 可以建立实体bean之间的一对一的关联   
11 @OneToMany                       -- 可以建立实体bean之间的一对多的关联   
12 @ManyToOne                       -- 可以建立实体bean之间的多对一的关联   
13 @ManyToMany                      -- 可以建立实体bean之间的多对多的关联   
14 @Formula                         -- 一个SQL表达式,这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等)   
15 @OrderBy                         -- Many端某个字段排序(List)  
16

以上是基本常用注解,下面是例子说明

  1@Entity  
  2@Table(name="promotion_info")   
  3public class Promotion implements Serializable {   
  4  
  5    //AUTO--可以是identity类型的字段,或者sequence类型或者table类型,取决于不同的底层数据库   
  6    @Id    
  7    @GeneratedValue(strategy = GenerationType.AUTO)   
  8    //对于oracle想使用各自的Sequence:   
  9    //@GeneratedValue(strategy = GenerationType.AUTO,generator="PROMOTION_SEQ")   
 10    //@SequenceGenerator(name="PROMOTION_SEQ",sequenceName="PROMOTION_SEQ")   
 11    private Long id;   
 12  
 13    @Column(name="group_start_amount")   
 14    private Integer groupStartAmount=0;   
 15       
 16    @Column(name="promotion_remark",length=200)   
 17    //@Lob 如果是文章内容可以使用 只需要把length=200去掉就可以了   
 18    private String remark;   
 19    //DATE      - java.sql.Date   
 20    //TIME      - java.sql.Time   
 21    //TIMESTAMP - java.sql.Timestamp   
 22    @Temporal(TemporalType.TIMESTAMP)   
 23    @Column(name="start_time")   
 24    private Date startTime;   
 25  
 26    //显示0 隐藏1   
 27    public static enum DisplayType {   
 28        显示,隐藏   
 29    }
   
 30    @Enumerated(value = EnumType.ORDINAL)//ORDINAL序数   
 31    private DisplayType displayType = DisplayType.显示;   
 32  
 33    @Version  
 34    private Integer version;   
 35  
 36    //CascadeType.PERSIST   -- 触发级联创建(create)   
 37    //CascadeType.MERGE     -- 触发级联合并(update)   
 38    //FetchType.LAZY        -- 延迟加载   
 39    @ManyToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE},fetch = FetchType.LAZY)   
 40    private PromotionGroup promotionGroup;   
 41  
 42    //单向ManyToMany   
 43    //@JoinTable(关联的表名)   
 44    //joinColumns -- promotion关联的列的外键   
 45    //inverseJoinColumns -- largess 关联列的外键   
 46    @ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.MERGE})   
 47    @JoinTable(name="promotion_largess",joinColumns={@JoinColumn(name="promotion_id")},inverseJoinColumns={@JoinColumn(name="largess_id")})   
 48    private Set<Largess> largess;    
 49       
 50    @OneToMany(mappedBy="promotion",cascade = CascadeType.ALL)   
 51    @OrderBy("quantity asc")//item中的列表会根据quantity排序   
 52    private List<PromotionItem> promotionItem;   
 53  
 54    //get set 省略.   
 55    @Transient  
 56    private Long hashcodeValue = null;   
 57    public synchronized int hashCode() {   
 58        if(hashcodeValue = null{   
 59            if(id == null)   
 60                hashcodeValue = new Long(super.hashCode());   
 61            else  
 62                hashcodeValue = id;   
 63        }
   
 64        return hashcodeValue.intValue();   
 65    }
   
 66  
 67    public boolean equals(Object obj) {   
 68        Promotion other = (Promotion) obj;   
 69        if(this == other)   
 70            return true;   
 71        if(this.id == null || other.id == null)   
 72            return false;   
 73        return this.id.equals(other.id);   
 74    }
   
 75  
 76}
   
 77@Entity  
 78@Table(name="promotion_group")   
 79public class PromotionGroup implements Serializable {   
 80    @Id    
 81    @GeneratedValue(strategy = GenerationType.AUTO)   
 82    private Long id;   
 83       
 84    //mappedBy的值"promotionGroup"指向owner(Promotion)端的关联属性,并且是双向关系   
 85    @OneToMany(mappedBy="promotionGroup",cascade=CascadeType.ALL)   
 86    private List<Promotion> promotion;   
 87  
 88    //get set 省略.   
 89}
   
 90@Entity  
 91@Table(name="largess")   
 92public class Largess implements Serializable {   
 93    @Id    
 94    @GeneratedValue(strategy = GenerationType.AUTO)   
 95    private Long id;   
 96  
 97    //1.sql语句中的字段和表名都应该和数据库相应,而不是类中的字段,   
 98    //若带有参数如la.id= id,这个=id才是类中属性   
 99    //2.操作字段一定要用别名   
100    @Formula(select max(la.id) from largess as la)   
101    private int maxId;   
102  
103    @Formula(select COUNT(la.id) from largess la)   
104    private int count;   
105  
106    @Transient  
107    private String img   
108  
109    //get set 省略.   
110}
  
111

posted on 2010-08-18 17:32 duansky 阅读(225) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航: