hibernate3 annotation的实例
实例一:一个对象的增删改查:
?
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class User2 implements java.io.Serializable {
?private Integer id;
?private String name;
?private String sex;
?private Date birthday;
?
?@Id
?//@GenericGenerator //可以不用,使用trigger来自增id,save()时需要setId();否则报异常
?public Integer getId() {
??return id;
?}
?public void setId(Integer id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
?public Date getBirthday() {
??return birthday;
?}
?public void setBirthday(Date birthday) {
??this.birthday = birthday;
?}
}
AnnotationHibernateSessionFactory与自动生成的HibernateSessionFactory.java中惟一不同的地方:
sessionFactory= new AnnotationConfiguration()?? //注意 建立 SessionFactory于前面的不同
??? ????????????????? .addPackage("com.model")
??? ????????????????? .addAnnotatedClass(User2.class)
??? ?????????????????? .configure()
??? ?????????????????? .buildSessionFactory();
?
void save(){
??Session session=AnnotationHibernateSessionFactory.getSession();
??Transaction tr=session.beginTransaction();? //事务(insert,update,delete需要事务)
??User2 u2=new User2();
??u2.setId(112);
??u2.setName("test");
??u2.setSex("男");
??u2.setBirthday(new Date());
??session.save(u2);
??tr.commit();
??session.close();
?}
?
?
实例二:
http://mydreams1983.blog.163.com/blog/static/8632879520091123102730619/?? hibernate 注解说明
* @author liuguangyi
?* @content? ejb3注解的API定义在javax.persistence.*包里面。
?*
?* 注释说明:
?* @Entity —— 将一个类声明为一个实体bean(即一个持久化POJO类)
?* @Id —— 注解声明了该实体bean的标识属性(对应表中的主键)。
?* @Table —— 注解声明了该实体bean映射指定的表(table),目录(catalog)和schema的名字
?* @Column —— 注解声明了属性到列的映射。该注解有如下的属性
?* @GenericGenerator —— 注解声明了一个hibernate的主键生成策略。支持十三种策略。该注解有如下属性
?* ?name 指定生成器名称
?* ?strategy 指定具体生成器的类名(指定生成策略)。
?* ?parameters 得到strategy指定的具体生成器所用到的参数。
? 例:@GeneratedValue(generator = "paymentableGenerator")???
?*????????? @GenericGenerator(name = "paymentableGenerator", strategy = "native")
7.sequence 调用谨慎数据库的序列来生成主键,要设定序列名,不然hibernate无法找到。
?*?????? 例:@GeneratedValue(generator = "paymentableGenerator")??
?*???@GenericGenerator(name = "paymentableGenerator", strategy = "sequence",???
?*??? parameters = { @Parameter(name = "sequence", value = "seq_payablemoney") })
?10.foreign 使用另一个相关的对象的主键。通常和<one-to-one>联合起来使用。
?*????? 例:@Id???
?*??? @GeneratedValue(generator = "idGenerator")??
?*??? @GenericGenerator(name = "idGenerator", strategy = "foreign",???
?*???????? parameters = { @Parameter(name = "property", value = "info") })???
?*??? Integer id;
?*? ?@OneToOne?
?*? ?EmployeeInfo info;
?
(三)映射主键属性
@Id
使用@Id注解可以将实体Bean中的某个属性定为为标识符(identifier)。该属性值可以通过应用自身创建,也可以通过Hibernate生成(推荐)。使用@GeneratedValue注释利用定义标识符的生产策略:
?*AUTO??????? 可以是一下三种任意一种类型,取决于地层数据库的不同
*TABLE?????? 使用表保存id值
*IDENTITY??? identity column
*SEQUENCE?? sequence
?@Id
@GeneratedValue(strategy = GenerationType.IDENTITy)
Public Integer getId() {… …}
?
在Hibernate的应用中提供了更加丰富的主键生产策略。
@org.hibernate.annotations.GenericGeneracor允许定义一个Hibernate特定的id生成器。
例:
Java代码
?