您的位置:首页 > 其它

Hibernate对同表中存在上下级关联关系的映射处理

2014-12-25 17:45 141 查看
如:权限管理的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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: