日期:2014-05-17  浏览次数:20685 次

hibernate映射2张表
一个employee表,中有性别,权限,数据库写入这个字段的都是标识符

还有一个s表,其中有一个字段存放标识符,另外一个字段存放标识符对应的中文,

想通过性别,权限的标示符,对应systemdictionary表,找出性别权限对应的中文字符,显示出来。
hibernate怎么关联这2张表呢。hql语句怎么写呢

我是菜鸟!求大虾来指点一下
------最佳解决方案--------------------
假设有employee类和权限两个类;
其中:
employee类   有性别、权限等属性;
权限类       有权限id、权限名称等属性;
①明显,employee包含了权限,employee为关系维护端;
②而“多个”employee有相同的“一个”权限;
由上面可知,是单向多对一关系,employee为“多”方,权限为“一”方,由employee负责维护关系。

ok,接下来写hbm映射表。
employee的映射表(employee.hbm.xml):

<class name="com.corp.temp.employee" table="t_employee">
<id name="employeeId">
<generator class="native"/>
</id>
<property name="sex"/>
<!--增加多对一关联映射,此处name="group"是值实体类User.java中的group属性-->
<many-to-one name="权限" column="权限id"/>
</class>

权限的映射表(权限.hbm.xml):

<class name="com.corp.temp.权限" table="t_权限">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>


------其他解决方案--------------------
又忘了编辑……

employee的映射表(employee.hbm.xml):
<class name="com.corp.temp.employee" table="t_employee">
    <id name="employeeId">
        <generator class="native"/>
    </id>
    <property name="sex"/>
    <!--增加多对一关联映射,此处name="权限"是值实体类权限.java中的名称属性。
        这里我额外加了级联cascade属性。
        意思是,在执行save或update方法时,会先保存被维护的另一端对象。-->
    <many-to-one name="权限" column="权限id" cascade="save-update"/>
</class>


在dao层,参考语句如下:


//存储例程
权限 qx = new 权限();
qx.setName("允许增加的权限");
session.save(qx);
Employee employee1 = new Employee();
employee1.setSex("男");
employee1.set权限(qx);
Employee employee2 = new Employee();
employee2.setSex("女");
employee2.set权限(qx);
session.save(employee1);
session.save(employee2);
//读取例程
//这里“1”代表id=1
Employee employee = (Employee)session.load(Employee.class, 1);
System.out.println("employee.sex=" + employee.getSex());
System.out.println("employee.权限.name=" + employee.get权限().getName());


至于说hql,楼主再找些资料吧。
不过,一定要注意,hql语句中的元素,如对象名、属性名等,都是java程序的元素,不是数据库元素。
------其他解决方案--------------------
多个外键关联一下。。。
------其他解决方案--------------------
s表
------其他解决方案--------------------
这个属于多对一关联映射。
------其他解决方案--------------------
是让employee表里的2个字段,同时与另外一张表的一个字段关联。。是多对一还是什么样的关联关系呢
------其他解决方案--------------------
引用:
是让employee表里的2个字段,同时与另外一张表的一个字段关联。。是多对一还是什么样的关联关系呢


楼主,如果要回复的话,请点下楼层下面的“引用,我可能永远都不知道你回复了我。

hbm当中,每一个属性,映射于数据库中。
比如<property name="sex"/>,就是对应于数据库的sex字段。

而<many-to-one>、<one-to-one>、<one-to-many>、<many-to-many>都是一类。每个标签都会对应数据库中的“一个”字段,就相当于是一个特殊的<property>。