大部分仍然使用javax.persistence中的注解,有些Hibernate扩展的注解,在org.hibernate.annotations包中,如GenericGenerator.
使用hibernate.cfg.xml中配置的事务,使用<mapping class="完整类名"/>加载注解的持久化类。Hibernate中可以混合使用注解和xml映射文件。
注解后不能使用Configuration类,而是AnnotationConfiguration类初始化Hibernate
1 SessionFactory sFactory=new AnnotationConfiguration() 2 .configure().buildSessionFactory(); 3 Session session=sFactory.getCurrentSession(); 4 Transaction tx=session.beginTransaction(); 5 User user=new User(); 6 user.setUsername("tazi2"); 7 user.setPassword("12345"); 8 session.save(user); 9 tx.commit();
注解种类:
@Entity @Table @Id @Column @Transient(非持久化属性) @Temporal(时间精度) @ManyToOne @...
在类前
@NamedQueries({@NamedQuery(name="getById",query="from User where id=:id")})
使用方法与在xml配置的命名查询相同
1 Query query=session.getNamedQuery("getById"); 2 query.setInteger("id", 4); 3 User user=(User)query.uniqueResult(); 4 System.out.println(user.getUsername());
@Version乐观锁 @Cache二级缓存 @Filters @FilterDef
@GeneratedValue默认为AUTO,根据底层数据库决定。还可以用Hibernate扩展的@GenericGenerator
例子:
package com.tazi.domin; import java.sql.Timestamp; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.Lob; import javax.persistence.ManyToOne; /** * Product entity. @author MyEclipse Persistence Tools */ @Entity public class Product implements java.io.Serializable { // Fields @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; @Column(length=20,nullable=false) private String name; @Column(scale=2) private Float price; @Lob private String description; @ManyToOne @JoinColumn(name="CATEGORY_ID")//,referencedColumnName="ID" private Category category; // Constructors public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } //... Property accessors }
Category.java
1 package com.tazi.domin; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 import javax.persistence.CascadeType; 7 import javax.persistence.Column; 8 import javax.persistence.Entity; 9 import javax.persistence.FetchType; 10 import javax.persistence.GeneratedValue; 11 import javax.persistence.GenerationType; 12 import javax.persistence.Id; 13 import javax.persistence.OneToMany; 14 15 /** 16 * Category entity. @author MyEclipse Persistence Tools 17 */ 18 @Entity 19 public class Category implements java.io.Serializable { 20 21 // Fields 22 @Id 23 @GeneratedValue(strategy=GenerationType.IDENTITY) 24 private Integer id; 25 @Column 26 private String name; 27 private String description; 28 @OneToMany( 29 cascade={CascadeType.ALL}, 30 fetch=FetchType.EAGER, //使用List不能使用eager,使用Set可以 31 mappedBy="category" 32 ) 33 private Setproducts = new HashSet(0); 34 35 // Constructors 36 37 /** default constructor */ 38 public Category() { 39 } 40 /** minimal constructor */ 41 public Category(String name) { 42 this.name = name; 43 } 44 /** full constructor */ 45 public Category(String name, String description, Set products) { 46 this.name = name; 47 this.description = description; 48 this.products = products; 49 } 50 //... Property accessors 51 }