实例一:一个对象的增删改查:
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生成器。
例:
- @Id
- @GeneratedValue(generator = "system-uuid")[该属性名自定义]
- @GenericGenerator(name = " system-uuid ", strategy = "uuid")
- [name可自定义,但是strategy属性必须是Hibernate中有效的主键策略]
- @Column (name = "user_id")
- private Integer userId;