hibernate annotation多対一関連
*.hbm.xmlの代わりにannotationの最初のプログラムを記録します.
annotationを使用するには、java eeのjavax.persistenceパッケージをインポートする必要があります.私はjava se JDKしか入っていなかったのでClassNotFound異常を投げました.
2つのエンティティproduct--category
@Entity
hibernate.cfg.xmlは相変わらず変わらず、に変えただけです.
最後にツールクラスを挿入しましょう
annotationを使用するには、java eeのjavax.persistenceパッケージをインポートする必要があります.私はjava se JDKしか入っていなかったのでClassNotFound異常を投げました.
2つのエンティティ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は相変わらず変わらず、
<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();
}
}