JPA中配置实体类与表的对应关系以及配置表之间的关系都是用注解的方式来完成的。原来hibernate是用xml的方式来配置的,后来hibernate自身也带注解的功能了,所以即使不用jpa,hibernate也是能使用注解功能的,其实你可以发现使用注解功能是所引用的那个jar包,就在hibernate开发包中requied文件夹下,所以你不使用jpa去写不导jpa的jar包,注解功能也能照常用。
直接看Customer 类和 Contact类,customer是主表:
Customer实体类:
package com.dimples.dao;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
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.OneToMany;
import javax.persistence.Table;
@Entity //标明这就只是个实体,其他什么都不干
@Table(name="customer") //对应表名
public class Customer implements Serializable {
@Id //标明是id字段
@Column(name="id") //字段名称
@GeneratedValue(strategy=GenerationType.IDENTITY) //指定主键生成策略
private Integer id;
@Column(name="name")
private String name;
@Column(name="address")
private String address;
@Column(name="level")
private String level;
//mappedBy相当于之前的inverse,由Contact里面的custommer属性的set方法去维护关联关系。简单点说就是本类放弃维护,即inverse=true
@OneToMany(targetEntity=Contact.class,mappedBy="customer")
private Set<Contact> contacts = new HashSet<Contact>(0);
public Set<Contact> getContacts() {
return contacts;
}
public void setContacts(Set<Contact> contacts) {
this.contacts = contacts;
}
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 String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + ", address=" + address + ", level=" + level + "]";
}
}
这是Contact实体类:
package com.dimples.dao;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name="contact")
public class Contact implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Integer id;
@Column(name="name")
private String name;
@Column(name="address")
private String address;
@Column(name="phone")
private String phone;
@ManyToOne(targetEntity=Customer.class)//体现依赖的主表
//name体现本字段名称,至于referencedColumnName属性用于指定主表中对应的字段名,可填可不填
@JoinColumn(name="customer_id",referencedColumnName="id")
private Customer customer;
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 String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
@Override
public String toString() {
return "Contact [id=" + id + ", name=" + name + ", address=" + address + ", phone=" + phone + "]";
}
}