一.各表之间关系总览
从表里看出 company 和 user 是一对多关系
user 和role 是多对多关系 urser_role 是中间表
二. 配置一对多 orm元数据
1.一的一方(主表)
对应的类 company 以及 orm元数据
public class Company {
private Long company_id;
private String company_name;
//表达多对一关系
private Set<User> users = new HashSet<User>();
//getter,setter方法啊
//无参构造函数
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 配置表与实体的关系 -->
<hibernate-mapping package="domain">
<class name="Company" table="company"><!-- name:类名 注意大小写 table:表名 -->
<id name="company_id" column="company_id"><!-- OID name:表中属性名 column:列名 如果两者一致 可省略column-->
<generator class="native"></generator><!-- 主键生成策略 -->
</id>
<property name="company_name" column="company_name" ></property>
<!-- 一的一方(主表) 在配置文件中体现 -->
<!-- cascade:主表中主键删除,自动删除从表中相关的行 inverse:主表放弃维护关系,让从表维护,默认false-->
<set name="users" cascade="delete" inverse="true"><!-- set:用set的集合装User对象 name:set集合的变量名 -->
<key column="company_id"></key><!-- 从表外键属性名(列名) -->
<one-to-many class="User"/><!-- 一对多 class:多的一方的类名 -->
</set>
</class>
</hibernate-mapping>
2.多的一方(从表)对应的类 user 以及 orm元数据
public class User {
private Long user_id;
private String username;
private String password;
private Long company_id ;
private Long role_id;
//表达一对多关系
private Company company;
//表达多对一关系
private Set<Role> roles = new HashSet<Role>();
//getter,setter方法啊
//无参构造函数
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 配置表与实体的关系 -->
<hibernate-mapping package="domain">
<class name="User" table="user" >
<id name="user_id" column="user_id">
<generator class="native"></generator>
</id>
<property name="username" column="username" ></property>
<property name="password" column="password"></property>
<!-- 多对一 name:一的一方的引用对象名 column:主表的主键 class:主表的类名-->
<many-to-one name="company" column="company_id" class="Company" cascade="save-update"></many-to-one>
<set name="roles" table="user_role" cascade="save-update">
<key column="user_id"></key>
<many-to-many class="Role" column="role_id"></many-to-many>
</set>
</class>
</hibernate-mapping>
三.多对多
user表的对象 以及 orm元数据
public class User {
private Long user_id;
private String username;
private String password;
private Long company_id ;
private Long role_id;
//表达一对多关系
private Company company;
//表达多对一关系
private Set<Role> roles = new HashSet<Role>();
//getter,setter方法啊
//无参构造函数
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 配置表与实体的关系 -->
<hibernate-mapping package="domain">
<class name="User" table="user" >
<id name="user_id" column="user_id">
<generator class="native"></generator>
</id>
<property name="username" column="username" ></property>
<property name="password" column="password"></property>
<!-- 多对一 name:一的一方的引用对象名 column:主表的主键 class:主表的类名-->
<many-to-one name="company" column="company_id" class="Company" cascade="save-update"></many-to-one>
<!--name:引用别人的对象名 table:中间表名-->
<set name="roles" table="user_role" cascade="save-update">
<key column="user_id"></key><!-- column: 自己表的主键-->
<many-to-many class="Role" column="role_id"></many-to-many><!-- 多对多 class:别人的类名 column:我引用别人的外键列名 -->
</set>
</class>
</hibernate-mapping>
2.role对象 以及 orm元数据
public class Role {
private Long role_id;
private String role_name;
private String role_memo;
//多对多关系
private Set<User> users = new HashSet<User>();
//getter,setter方法啊
//无参构造函数
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="domain">
<class name="Role" table="role">
<id name="role_id">
<generator class="native"></generator>
</id>
<property name="role_name"></property>
<property name="role_memo"></property>
<set name="users" table="user_role" inverse="true">
<key column="role_id" ></key>
<many-to-many class="User" column="user_id"></many-to-many>
</set>
</class>
</hibernate-mapping>