我是靠谱客的博主 聪明墨镜,最近开发中收集的这篇文章主要介绍hibernate一对多 更新,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

hsnh6020】:
插入:
在Student中添属性SC(SC表示课程表);
Student student = new Student();
SC sc = new SC();
student.setSC(sc);
在hibernate配置文件中设置cascade=true,

getHibernateTemplate.save(student);
更新与插入类试;
getHibernateTemplate.update(student);

【deitecnu】:
楼上能否具体点

【jerryzl】:
学生Student.hbm.xml:
<hibernate-mapping>
    <class name="com.ssh.Student" table="student" schema="dbo" catalog="sshcourse">
        <id name="stuId" type="integer">
            <column name="stu_id" />
            <generator class="native" />
        </id>
        <property name="stuName" type="string">
            <column name="stu_name" length="50" />
        </property>
        <property name="stuPwd" type="string">
            <column name="stu_pwd" length="50" />
        </property>
        <set name="courses"
        table="course_student_table"
        cascade="save-update"
        inverse="false" 
        lazy="false">
        <key column="stu_id"></key>
        <many-to-many class="com.ssh.Course" column="cou_id"></many-to-many>
        </set>
    </class>
</hibernate-mapping>
课程Course.hbm.xml:
<hibernate-mapping>
    <class name="com.ssh.Course" table="course" schema="dbo" catalog="sshcourse">
        <id name="couId" type="integer">
            <column name="cou_id" />
            <generator class="native" />
        </id>
        <property name="couName" type="string">
            <column name="cou_name" length="50" />
        </property>
        <property name="couDis" type="string">
            <column name="cou_dis" length="50" />
        </property>
        <set name="students"
        table="course_student_table"
        cascade="save-update"
        inverse="true">
        <key column="cou_id"></key>
        <many-to-many class="com.ssh.Student" column="stu_id"></many-to-many>
        </set>
    </class>
</hibernate-mapping>
他们之间是通过course_student_table学生课程表关联的

【jerryzl】:
cascade=true表设置级联,即插入学生信息同时也插入选课信息。

【jk88811】:
Hibernate感觉挺难用的

可以我的思想还停留在关系操作上吧, 现在喜欢用Ibatis

【deitecnu】:
jerryzl() 说的比较详细了,不过还有几点疑问:

<set name="courses"
        table="course_student_table"
        cascade="save-update"
        inverse="false" 
        lazy="false">
        <key column="stu_id"></key>
        <many-to-many class="com.ssh.Course" column="cou_id"></many-to-many>
</set>
<set name="students"
        table="course_student_table"
        cascade="save-update"
        inverse="true">
        <key column="cou_id"></key>
        <many-to-many class="com.ssh.Student" column="stu_id"></many-to-many>
</set>

上面的inverse="false"  lazy="false"和下面的inverse="true"有什么区别?
能否给出增加、修改、删除的方法?
比如增加一个学生,同时增加这个学生的选课信息
    修改一个学生,同时修改这个学生的选课信息
    删除一个学生,同时删除这个学生的选课信息
给出简单的方法就可以了,谢谢


【jerryzl】:
inverse="false" 表示为主控方,主控方负责维护关联关系,一般在一对多关系中,把多的一方设置为inverse="false"。lazy="false表示是延迟加载,当为true时,启动延迟加载,如两个关联a,b不延迟加载时可能加载a时候,也把b加载了,但你可能没用b,只用a了,这就造成了浪费,延迟加载时表示用到b时才加载。
窝做了一个删除你看看。
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
CourseID courseid=(CourseID)form;

Student student=studao.findById((Integer)(request.getSession().getAttribute("stuid")));
if(courseid.getCourses().length>0)
{
for(int i=0;i<courseid.getCourses().length;i++)
{
Integer cid=new Integer(courseid.getCourses()[i]);
Course course=coudao.findById(cid);
student.getCourses().remove(course);
System.out.println("this is test1 sdfsdfg");
System.out.println(cid);
}
}
else
{
System.out.println("null");
}
                studao.delete(student);
return mapping.findForward("success");
}
我做的是当vv用户登录时,它选择一一科,那在数据库中就把学生表的vv用户删除,同时把vv用户的选课信息也删除了。道理差不多,你改改。

【deitecnu】:
多谢楼上,怎么说也应该把分数都加给你了

【zapldy】:
在实际开发过程中,我们一般都是先建好数据库,然后根据数据库和需求说明来建立自己相应的POJO的,一般在建立数据库的时候,每一张表都有自己的ID,就算是多对多关联关系的中间表也有自己的ID,而楼上的几位没有考虑这一点,都是POJO类用两端set的方法,但这种方法当中间表有自己的ID或者其他的属性的时候是行不通的.这种两端set方法确实好,非常省事情,但在大的项目种却非常少见,一般都是把多对多关系分成两个一对多的关系,即中间表我们也写一个POJO类,然后按照一对多或者多对一的策略来关联它们之间的关系.

最后

以上就是聪明墨镜为你收集整理的hibernate一对多 更新的全部内容,希望文章能够帮你解决hibernate一对多 更新所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部