如:权限管理的Resource资源,有上下级关联关系的映射
Hibernate实体类书写(toString 方法不要加入两个关联关系的映射)
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Entity
@Table(name="resource")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Resource {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(nullable=true)
private String name;
@Column(nullable=true)
private String address;
@ManyToOne(cascade = { CascadeType.DETACH, CascadeType.MERGE,
CascadeType.REMOVE }, fetch = FetchType.LAZY)
@JoinColumn(name = "parentId")
private Resource parent;
@OneToMany(mappedBy = "parent", cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
private List<Resource> childs;
//省略get set
}
测试代码
public class Test1 {
private static Configuration configuration = null;
private static SessionFactory sessionFactory = null;
private static org.hibernate.service.ServiceRegistry serviceRegistry = null;
private static Session session = null;
static{
configuration = new Configuration();
configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost/test?characterEncoding=utf-8");
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
session = sessionFactory.getCurrentSession();
}
public static void main(String[] args) throws Exception {
session.beginTransaction();
Resource r = (Resource)session.get(Resource.class, 9);
System.out.println(r.getParent());
Resource rr = (Resource)session.get(Resource.class, 1);
System.out.println(r.getChilds());
}
}