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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值