首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate继承投射

2013-10-30 
Hibernate继承映射用户(父类):public class User implements Serializable {private Integer idprivate S

Hibernate继承映射
用户(父类):
public class User implements Serializable {
private Integer id;
private String username;
private String password;
public User() {
super();
}
...此处省略get/set方法...
}

普通用户(子类):
public class Member extends User {
private String name;
private String phone;
public Member() {
super();
}
...此处省略get/set方法...
}

管理员(子类):
public class Manager extends User {
public Manager() {
super();
}
}

映射文件的配置
方式一(只建一张表):
<hibernate-mapping package="day03.pm">
<class name="User" table="t_user1">
<id name="id">
<generator discriminator-value="me">
<property name="name"></property>
<property name="phone"></property>
</subclass>

<subclass name="Manager" discriminator-value="ma">
</subclass>
</class>
</hibernate-mapping>

mysql> desc t_user1;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| status   | varchar(255) | NO   |     | NULL    |                |
| username | varchar(255) | YES  |     | NULL    |                |
| password | varchar(255) | YES  |     | NULL    |                |
| name     | varchar(255) | YES  |     | NULL    |                |
| phone    | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

方式二(每个子类各建一张表):
Member.hbm.xml
<hibernate-mapping package="day03.pm">
<import table="t_member1">
<id name="id">
<generator table="t_manager1">
<id name="id">
<generator table="t_user2">
<id name="id">
<generator table="t_member2">
<key column="user_id"></key>
<property name="name"></property>
<property name="phone"></property>
</joined-subclass>

<joined-subclass name="Manager" table="t_manager2">
<key column="user_id"></key>
</joined-subclass>

</class>
</hibernate-mapping>

mysql> desc t_user2;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| username | varchar(255) | YES  |     | NULL    |                |
| password | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+


mysql> desc t_member2;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| user_id | int(11)      | NO   | PRI | NULL    |       |
| name    | varchar(255) | YES  |     | NULL    |       |
| phone   | varchar(255) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+

mysql> desc t_manager2;
+---------+---------+------+-----+---------+-------+
| Field   | Type    | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| user_id | int(11) | NO   | PRI | NULL    |       |
+---------+---------+------+-----+---------+-------+

热点排行