Hibernate 注解 实体

来源:互联网 发布:mysql 5.5 linux安装 编辑:程序博客网 时间:2024/05/07 19:47
@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)

@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 隐藏1public static enum DisplayType {显示,隐藏}@Enumerated(value = EnumType.ORDINAL)//ORDINAL序数private DisplayType displayType = DisplayType.显示;@Versionprivate 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 省略....@Transientprivate Long hashcodeValue = null;public synchronized int hashCode() {if(hashcodeValue = null) {if(id == null)hashcodeValue = new Long(super.hashCode());elsehashcodeValue = 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;@Transientprivate String img//get set 省略....}