hibernate 之 annotation
来源:互联网 发布:我的体育老师卫视网络 编辑:程序博客网 时间:2024/06/05 09:07
import java.util.Date;import javax.persistence.Column;//注意此处是javax的import javax.persistence.Entity;import javax.persistence.EnumType;import javax.persistence.Enumerated;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;import javax.persistence.Temporal;import javax.persistence.TemporalType;import javax.persistence.Transient;@Entity //每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明@Table(name="_teacher")//指定表名public class Teacher {private int id;private String name;private String stuNo;private Title title;private Date date;/** * ID生成策略: * xml: 常用 native,identity,sequence,uuid,用generator设置 eg: <id name="id"><generator class="native"/></id> * annotation: 默认@GeneratedValue(strategy=GenerationType.AUTO)对mysql使用auto_increment,oracle 使用sequence */@Id //指定主键@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="teacher_id")//指定列名 (通常写在get方法上)public int getId() {return id;}public void setId(int id) {this.id = id;}@Column(name="username")public String getName() {return name;}public void setName(String name) {this.name = name;}// Column属性:@Column(updatable = false, name = "flight_name", nullable = false, length=50)//@Column(// name="columnName"; (1)// boolean unique() default false; (2)// boolean nullable() default true; (3)// boolean insertable() default true; (4)// boolean updatable() default true; (5)// String columnDefinition() default ""; (6)// String table() default ""; (7)// int length() default 255; (8)// int precision() default 0; // decimal precision (9)// int scale() default 0; // decimal scale@Transient //此字段不生成表中的列名public String getStuNo() {return stuNo;}public void setStuNo(String stuNo) {this.stuNo = stuNo;}@Temporal(value=TemporalType.DATE)//处理时间类型精度 value属性可不写(@Temporal(TemporalType.DATE))public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}@Enumerated(EnumType.STRING)//枚举类型public Title getTitle() {return title;}public void setTitle(Title title) {this.title = title;}}
联合主键:
/** * 联合主键 常用的两种方法 * i.@EmbeddedId * ii.@Id @IdClass(StuPk.class) * * Hibernate要求具有联合主键的实体类实现Serializable接口,并且重写hashCode与equals方法, * 重写这两个方法的原因在于Hibernate要根据数据库的联合主键来判断某两行记录是否是一样的,如果一样那么就 * 认为是同一个对象,如果不一样,那么就认为是不同的对象。这反映到程序领域中就是根据hashCode与equals * 方法来判断某两个对象是否能够放到诸如Set这样的集合当中。联合主键的实体类实现Serializable接口的原因 * 在于使用get或load方法的时候需要先构建出来该实体的对象,并且将查询依据(联合主键)设置进去,然后作为get * 或load方法的第二个参数传进去即可 * * 以下例子中主键是id,name */
主键实体类:
import java.io.Serializable;public class StuPk implements Serializable{private int id;private String name;public int getId() {return id;}public String getName() {return name;}public void setId(int id) {this.id = id;}public void setName(String name) {this.name = name;}@Overridepublic boolean equals(Object obj) {if(obj instanceof StuPk){StuPk stuPk=(StuPk)obj;if(this.id==stuPk.id&&this.name.equals(stuPk.name))return true;}return false;}@Overridepublic int hashCode() {return this.name.hashCode();}}
import javax.persistence.EmbeddedId;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.IdClass;import javax.persistence.Table;@Entity@Table(name="_student")@IdClass(StuPk.class) //使用第二种方法public class Student {private int id; //第二种方法private String name;//第二种方法//private StuPk stuPk;// 使用第一种方法时 包含id,nameprivate String title;@Id //第二种方法public int getId() {return id;}public void setId(int id) {this.id = id;}@Id //第二种方法public String getName() {return name;}public void setName(String name) {this.name = name;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}//@EmbeddedId //使用第一种方法//public StuPk getStuPk() {//return stuPk;//}//public void setStuPk(StuPk stuPk) {//this.stuPk = stuPk;//}}
测试类
import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;public class TestEg {private static SessionFactory sessionFactory;private static Session session;@BeforeClasspublic static void befor() {Configuration cfg=new Configuration(); cfg.configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); sessionFactory=cfg.buildSessionFactory(serviceRegistry); session=sessionFactory.openSession();}@Testpublic void testHibernate(){Teacher s=new Teacher(); s.setTitle(Title.A);s.setName("ljf");s.setDate(new Date()); session.beginTransaction(); session.save(s); session.getTransaction().commit();}@Testpublic void testStudent(){Student s=new Student();//StuPk stuPk=new StuPk();//stuPk.setName("ljf");//s.setStuPk(stuPk);s.setName("an");s.setTitle("title");session.beginTransaction(); session.save(s); session.getTransaction().commit();}@AfterClasspublic static void after(){if(session!=null)session.close();if(sessionFactory!=null)sessionFactory.close();}}
- hibernate 之 annotation
- hibernate之annotation
- 【Hibernate】入门搭建之Annotation
- hibernate annotation 之 注解声明
- hibernate annotation 之 注解声明
- hibernate annotation之主键生成策略
- Hibernate 使用 Annotation 之 联合主键
- Hibernate配置EhCache缓存之annotation注解
- hibernate annotation 之 主键生成策略
- Hibernate 使用Annotation之联合主键
- hibernate annotation 之 主键生成策略
- hibernate annotation 之 主键生成策略
- hibernate annotation 之 主键生成策略
- Hibernate级联关系OneToMany之 Annotation实现
- hibernate annotation 之 主键生成策略
- Hibernate Annotation之主键生成策略
- hibernate annotation 之mappedBy 与 @JoinColumn区别
- hibernate annotation 之 主键生成策略
- 万年历查询,一个wonderful的年历
- vb.net winform在panel中打开exe文件
- Linux系统各个目录的作用(中英文对照)
- u/cos红外学习模块总结
- git的那些工具
- hibernate 之 annotation
- xcode 4.2 如何调试 EXC_BAD_ACCESS
- MM模块常用T-code
- 谈谈Teechart在工业监控方面的应用实例
- 机器如何区分和判定指令和数据
- 解决SVN unable to load defalut SVN client错误
- iOS Block学习
- Objective-C数组小结
- dg主备库切换步骤