Hibernate教程03——类继承(每个类一张表)

来源:互联网 发布:vb flag 编辑:程序博客网 时间:2024/06/16 08:44

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; @ManyToOneprivate Tree parent; @OneToManyprivate 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;}}


 

五、测试类

@Testpublic 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();}@Testpublic 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的生成策略不可以是autoidentity。我只测试了table这种生成策略,其他的没有测试。

0 0
原创粉丝点击