Hibernate常用的注解
喜欢使用注解的方式,感觉没有xml那么繁琐,下面是转来的一些常用注解
文章转自:
http://bask.iteye.com/blog/212632
@Entity --声明为一个实体bean @Table(name="promotion_info") --为实体bean映射指定表(表名="promotion_info) @Id --声明了该实体bean的标识属性 @GeneratedValue --可以定义标识字段的生成策略. @Transient --将忽略这些字段和属性,不用持久化到数据库 @Column(name="promotion_remark")--声明列(字段名="promotion_total") 属性还包括(length=200等) @Temporal(TemporalType.TIMESTAMP)--声明时间格式 @Enumerated --声明枚举 @Version --声明添加对乐观锁定的支持 @OneToOne --可以建立实体bean之间的一对一的关联 @OneToMany --可以建立实体bean之间的一对多的关联 @ManyToOne --可以建立实体bean之间的多对一的关联 @ManyToMany --可以建立实体bean之间的多对多的关联 @Formula --一个SQL表达式,这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等) @OrderBy --Many端某个字段排序(List)
时间的处理
Import java.util.Date; ....... private Date uploadtime; //设置时间格式 @Temporal(TemporalType.TIMESTAMP) public Date getUploadtime() { return uploadtime; } public void setUploadtime(Date uploadtime) { this.uploadtime = uploadtime; }
以上是基本常用注解,下面是例子说明
@Entity @Table(name="promotion_info") public class Promotion implements Serializable { //AUTO--可以是identity类型的字段,或者sequence类型或者table类型,取决于不同的底层数据库 @Id @GeneratedValue(strategy = GenerationType.AUTO) //对于oracle想使用各自的Sequence: //@GeneratedValue(strategy = GenerationType.AUTO,generator="PROMOTION_SEQ") //@SequenceGenerator(name="PROMOTION_SEQ",sequenceName="PROMOTION_SEQ") private Long id; @Column(name="group_start_amount") private Integer groupStartAmount=0; @Column(name="promotion_remark",length=200) //@Lob 如果是文章内容可以使用 只需要把length=200去掉就可以了 private String remark; //DATE - java.sql.Date //TIME - java.sql.Time //TIMESTAMP - java.sql.Timestamp @Temporal(TemporalType.TIMESTAMP) @Column(name="start_time") private Date startTime; //显示0 隐藏1 public static enum DisplayType { 显示,隐藏 } @Enumerated(value = EnumType.ORDINAL)//ORDINAL序数 private DisplayType displayType = DisplayType.显示; @Version private Integer version; //CascadeType.PERSIST -- 触发级联创建(create) //CascadeType.MERGE -- 触发级联合并(update) //FetchType.LAZY -- 延迟加载 @ManyToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE},fetch = FetchType.LAZY) private PromotionGroup promotionGroup; //单向ManyToMany //@JoinTable(关联的表名) //joinColumns -- promotion关联的列的外键 //inverseJoinColumns -- largess 关联列的外键 @ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.MERGE}) @JoinTable(name="promotion_largess",joinColumns={@JoinColumn(name="promotion_id")},inverseJoinColumns={@JoinColumn(name="largess_id")}) private Set<Largess> largess; @OneToMany(mappedBy="promotion",cascade = CascadeType.ALL) @OrderBy("quantity asc")//item中的列表会根据quantity排序 private List<PromotionItem> promotionItem; //get set 省略.... @Transient private Long hashcodeValue = null; public synchronized int hashCode() { if(hashcodeValue = null) { if(id == null) hashcodeValue = new Long(super.hashCode()); else hashcodeValue = id; } return hashcodeValue.intValue(); } public boolean equals(Object obj) { Promotion other = (Promotion) obj; if(this == other) return true; if(this.id == null || other.id == null) return false; return this.id.equals(other.id); } } @Entity @Table(name="promotion_group") public class PromotionGroup implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; //mappedBy的值"promotionGroup"指向owner(Promotion)端的关联属性,并且是双向关系 @OneToMany(mappedBy="promotionGroup",cascade=CascadeType.ALL) private List<Promotion> promotion; //get set 省略.... } @Entity @Table(name="largess") public class Largess implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; //1.sql语句中的字段和表名都应该和数据库相应,而不是类中的字段, //若带有参数如la.id= id,这个=id才是类中属性 //2.操作字段一定要用别名 @Formula(select max(la.id) from largess as la) private int maxId; @Formula(select COUNT(la.id) from largess la) private int count; @Transient private String img //get set 省略.... }
双向的manytomany
@ManyToMany(mappedBy="largess" cascade = {CascadeType.PERSIST,CascadeType.MERGE}) //@ManyToMany(mappedBy="largess" cascade=CascadeType.ALL)//如果全包就用ALL @JoinTable(name="promotion_largess",joinColumns={@JoinColumn(name="largess_id")},inverseJoinColumns={@JoinColumn(name="promotion_id")}) private Set<Promotion> promotion;