Hibernate教程03——类继承(每个类一张表)
一、简介
每个类的都会生成一张表,只有子类(实现类)才会插入数据,还有一些相关表,例如生成id的表等等。
二、父类Tree和相关annotation的配置
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Tree {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
@Column(name = "id")
private Long id;
private String name;
private String description;
@ManyToOne
private Tree parent;
@OneToMany
private List<Tree> children;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Tree getParent() {
return parent;
}
public void setParent(Tree parent) {
this.parent = parent;
}
public List<Tree> getChildren() {
return children;
}
public void setChildren(List<Tree> children) {
this.children = children;
}
}
三、子类Department
@Entity
public class Department extends Tree {
private String leader;
private String secondLeader;
private String link;
private String remarkk;
public String getLeader() {
return leader;
}
public void setLeader(String leader) {
this.leader = leader;
}
public String getSecondLeader() {
return secondLeader;
}
public void setSecondLeader(String secondLeader) {
this.secondLeader = secondLeader;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getRemarkk() {
return remarkk;
}
public void setRemarkk(String remarkk) {
this.remarkk = remarkk;
}
}
四、子类menu
@Entity
public class Menu extends Tree {
private String link;
private String classname;
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
}
五、测试类
@Test
public void test02(){
Session session = HibernateUtil.getSessionfactory().getCurrentSession();
session.beginTransaction();
Department tree = new Department();
tree.setName("信息中心");
tree.setDescription("信息中心");
tree.setLeader("刘备");
session.save(tree);
Department tree2 = new Department();
tree2.setName("软件二室");
tree2.setDescription("软件二室");
tree2.setLeader("张飞");
tree2.setParent(tree);
session.save(tree2);
tree2 = new Department();
tree2.setName("软件二室");
tree2.setDescription("软件二室");
tree2.setLeader("关羽");
tree2.setParent(tree);
session.save(tree2);
tree2 = new Department();
tree2.setName("软件二室");
tree2.setDescription("软件二室");
tree2.setLeader("赵云");
tree2.setParent(tree);
session.save(tree2);
session.getTransaction().commit();
HibernateUtil.getSessionfactory().close();
}
@Test
public void test03(){
Session session = HibernateUtil.getSessionfactory().getCurrentSession();
session.beginTransaction();
Menu tree = new Menu();
tree.setName("系统管理");
tree.setDescription("系统配置的一些管理");
tree.setLink("sys/admin");
session.save(tree);
Menu tree2 = new Menu();
tree2.setName("用户管理");
tree2.setDescription("用户配置的一些管理");
tree2.setLink("sys/user");
tree2.setParent(tree);
session.save(tree2);
tree2 = new Menu();
tree2.setName("角色管理");
tree2.setDescription("角色配置的一些管理");
tree2.setLink("sys/role");
tree2.setParent(tree);
session.save(tree2);
session.getTransaction().commit();
HibernateUtil.getSessionfactory().close();
}
六、数据库生成的表
七、department表中的数据
八、Menu表中的数据
九、注意事项
Id的生成策略不可以是auto和identity。我只测试了table这种生成策略,其他的没有测试。