记录一下annotation代替*.hbm.xml的第一个程序
使用annotation需先导入java ee中的javax.persistence包。我当时只装了java se JDK 所以就抛ClassNotFound异常。
有两个实体product -- category
@Entity()
@Table(name="product",catalog="test")
public class Product implements Serializable {
private Integer id;
private Category category;
private String name;
private String price;
private String description;
public Product() {
// TODO Auto-generated constructor stub
}
public Product(Category category, String name, String price,
String description) {
super();
this.category = category;
this.name = name;
this.price = price;
this.description = description;
}
@GenericGenerator(name="generator",strategy="increment")//按自增策略生产标示符
@Id
@GeneratedValue(generator="generator")
@Column(name="id",nullable=true,length=10)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="c_id")
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="price",length=10)
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
@Column(name="description")
public String getDescription() {
return description;
}
public void setDescription(String descripton) {
this.description = descripton;
}
}
@Entity
@Table(name="category",catalog="test")
public class Category implements Serializable {
private Integer id;
private String name;
private String description;
private Set<Product> products = new HashSet<Product>();
public Category() {
// TODO Auto-generated constructor stub
}
public Category(String name, String description, Set<Product> products) {
super();
this.name = name;
this.description = description;
this.products = products;
}
@GenericGenerator(name="generator",strategy="increment")
@Id
@GeneratedValue(generator="generator")
@Column(name="id",unique=true,nullable=false)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="name", length=20)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="description", length=500)
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
//此处只需要注释OneToMany,不需要注释JoinColumn.
//注释@JoinColumn在多的一端
@OneToMany(cascade=CascadeType.ALL,mappedBy="category")
public Set<Product> getProducts() {
return products;
}
public void setProducts(Set<Product> products) {
this.products = products;
}
hibernate.cfg.xml依然没有变,只是把<mapping resource=""/>换成了<mapping class="">
<hibernate-configuration>
<session-factory>
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="connection.username">root</property>
<property name="connection.password">1234</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="format_sql">true</property>
<property name="show_sql">true</property>
<property name="hibernate.id.new_generator_mappings">true</property>
<property name="current_session_context_class">thread</property>
<mapping class="entity.Product" />
<mapping class="entity.Category" />
</session-factory>
</hibernate-configuration>
最后在插入一个工具类吧
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static{
try{
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable e){
throw new ExceptionInInitializerError(e);
}
}
public static Session getSession() throws HibernateException{
return sessionFactory.openSession();
}
}