`
liutjedu
  • 浏览: 46752 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类
最新评论

初学spring,带来同时操作两个表的问题,见笑!

阅读更多
如下两个表,一对多的关系:riskDutyFacotr<->riskDutyFactorUnit
---------------------------
create table riskDutyFactor
(
   ID                   INTEGER                not null,
   factorName         CHAR(20),
   specComments       VARCHAR(50),
   sign               CHAR(1),
   constraint P_riskDutyFactor_I primary key (ID)
);

--==============================================================
-- Table: riskDutyFactorUnit
--==============================================================
create table riskDutyFactorUnit
(
   ID                   INTEGER                not null,
   rdf_ID             INTEGER,
   factorUnit         CHAR(20),
   value              CHAR(30),
   constraint P_Key_1 primary key (ID)
);
---------------------------
service中操作两个表的代码如下:
//保存一个责任要素
public void saveRiskdutyfactor(String factorName,String factorSign,String factorUnit,String factotValue){
riskDutyFactor.setFactorname(factorName);
if(factorSign.equals("factorSign")){
riskDutyFactor.setSign("0");
}else{
riskDutyFactor.setSign("1");
}

riskDutyFactorUnit.setFactorunit(factorUnit);
riskDutyFactorUnit.setValue(factotValue);
// if(riskDutyFactor.getRiskdutyfactorunits().add(riskDutyFactorUnit)==true){
// System.out.println("success add children! ");
// }经过测试是可以执行该段代码的
riskDutyFactor.getRiskdutyfactorunits().add(riskDutyFactorUnit);
this.getRiskDutyFactorDAO().saveRiskdutyfactor(riskDutyFactor);
this.getRiskDutyFactorUnitDAO().saveRiskDutyFactorUnit(riskDutyFactorUnit);
}
----------------------
spring配置文件为:
<bean id="proxyTemplate" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

<bean id="riskDutyFactorTarget" parent="proxyTemplate">
<property name="target">
<bean class="com.gi.service.defineFactor.spring.RiskDutyFactorServiceImpl">
<property name="riskDutyFactorDAO">
<ref local="riskDutyFactorDAO" />
</property>
<property name="riskDutyFactorUnitDAO">
<ref local="riskDutyFactorUnitDAO" />
</property>
</bean>
</property>
</bean>
-----------------------
可以成功执行日志为:
Hibernate: values nextval for S_riskDutyFactor
Hibernate: values nextval for S_riskDutyFactorUnit
Hibernate: insert into XFLIU.RISKDUTYFACTOR (FACTORNAME, SIGN, ID) values (?, ?, ?)
Hibernate: insert into XFLIU.RISKDUTYFACTORUNIT (RDF_ID, FACTORUNIT, VALUE, ID) values (?, ?, ?, ?)
但是没有将两个表关联起来,为什么?我一直怀疑是我spring的配置有问题,两个dao在两个session里执行的,对吗?如果正确我应该怎么改进?谢谢大家!
分享到:
评论
4 楼 liutjedu 2007-01-09  
谢谢你的建议,我正在看中.其实以前也开发过相关项目,不过可能有些没有太深入,写完程序就完事了吧.
谢谢.
3 楼 Allen 2007-01-08  
引用
Hibernate: insert into XFLIU.RISKDUTYFACTORUNIT (RDF_ID, FACTORUNIT, VALUE, ID) values (?, ?, ?, ?)

难道这里insert的RDF_ID是个空值?

我想你是漏了什么:
child.setParent(parent);  -->  riskDutyFactorUnit.setRiskDutyFactor(riskDutyFactor);



P.s. 我仍然坚持你应当参考一下那个Hibernate自带的例子,因为在那之后你会觉得原来根本就没有必要来论坛费事发帖。
2 楼 liutjedu 2007-01-08  
谢谢回复.不过可以先看一下我的hbm文件
Riskdutyfactorunit.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
    <class name="com.gi.po.Riskdutyfactorunit" table="RISKDUTYFACTORUNIT" schema="XFLIU">
        <id name="id" type="integer">
            <column name="ID" />
            <generator class="sequence" />
        </id>
        <many-to-one name="riskdutyfactor" class="com.gi.po.Riskdutyfactor" fetch="select">
            <column name="RDF_ID" />
        </many-to-one>

        <property name="factorunit" type="string">
            <column name="FACTORUNIT" length="20" />
        </property>
        <property name="value" type="string">
            <column name="VALUE" length="30" />
        </property>
    </class>
</hibernate-mapping>
----------
Riskdutyfactor.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
    <class name="com.gi.po.Riskdutyfactor" table="RISKDUTYFACTOR" schema="XFLIU">
        <id name="id" type="integer">
            <column name="ID" />
            <generator class="sequence" />
        </id>
        <property name="factorname" type="string">
            <column name="FACTORNAME" length="20" />
        </property>
        <property name="sign" type="string">
            <column name="SIGN" length="1" />
        </property>
        <set name="riskdutyfactorunits" inverse="true">
            <key>
                <column name="RDF_ID" />
            </key>
            <one-to-many class="com.gi.po.Riskdutyfactorunit" />
        </set>
    </class>
</hibernate-mapping>

以上文件我是直接通过工具生成的,并进行了核对.应该没有问题.既然是通过工具生成的,那我数据库这两个表应该有关联的?对吧?
1 楼 Allen 2007-01-08  
你确定两个数据库表之间也已经建立了关联(即外键关联)了吗?

这样的问题你应该首先想到参阅Hibernate自带的参考文档,里面就父子关系的维护有相当细致的论述(同时举出了一些非常实用的例子)。它可以帮助你找到更加优雅和易读的方法来维护实体之间的各种关系。

这里就有一个现成的例子:
http://www.hibernate.org/hib_docs/v3/reference/en/html/example-parentchild.html#example-parentchild-bidir

同时,个人认为你的Service层包办了一些应该由DAO层来处理的细节,这样的情况应当尽量地少。

而且,建模的过程应当使用一些工具来保证各级别的统一性。如果是 [手动建数据库表+手动编写PO代码+手动书写配置文件] 这样“原始粗糙”的模式,将很难保证不出差错。

相关推荐

    对于Spring初学者的学习建议

    ### Spring初学者学习指南 #### 一、基础知识的构建 对于初学者来说,学习Spring之前必须打牢基础,包括但不限于Java基础知识、面向对象编程以及设计模式。这些是理解和运用Spring框架的重要前提。 - **Java基础...

    Spring框架 初学者

    Spring框架,非常简单Demo,只适用于初学者。 1 首先我们需要一个bean,用某种方法(设置注入需要有setter函数,构造注入需要有构造函数,相应的bean.xml配置文件也会不同)设定注入方式。  2 bean.xml,设置bean...

    cxf与Spring的整合实例(适合初学者)

    **标题解析:** "cxf与Spring的整合实例(适合初学者)" 指的是一个教程或示例项目,旨在帮助初次接触CXF和Spring框架的开发者理解如何将这两个强大的开源工具集成在一起。CXF是一个流行的开源服务框架,常用于构建...

    spring 的简单例子工程适合初学者

    在这个简单的例子工程中,我们可能会看到如何使用 Spring 的 JdbcTemplate 或者 DataSource 来进行数据库操作。 **JdbcTemplate** JdbcTemplate 是 Spring 提供的一个简单且强大的工具,用于简化 JDBC 编程。它...

    MyBatis-Spring配置教程,非常适合初学者

    【MyBatis-Spring配置教程】是一份专为初学者设计的教程,旨在帮助学习者快速掌握如何在Spring框架中整合并使用MyBatis。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,而Spring则是一个...

    Spring项目初学(一)

    在这个初学者项目中,我们将深入探讨Spring的这两个关键特性。 **IoC(Inversion of Control,控制反转)**是Spring的核心特性之一。它改变了传统的对象创建方式,将对象的依赖关系管理从代码中剥离出来,交由...

    spring 教程 对初学者够了

    Spring框架的核心特性包括依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP),这两个特性极大地简化了Java应用的开发。 **2. Spring模块** Spring框架由多个模块组成,包括...

    对于Spring初学者的学习建议.pdf

    同时,Spring的官方文档(Spring reference)也是一个非常重要的资源,虽然阅读起来可能较为吃力,但它是获取最准确信息的途径。 三、开源项目研究 理论学习之后,理论联系实际是非常重要的一步。通过研究Spring...

    ServletJSPSpringMVC初学指南.zip

    Servlet JSP和Spring MVC初学指南是Servlet、JSP 和Spring MVC 的入门教程,是畅销图书《Spring MVC 学习指南》的姊妹篇。 Servlet 和JSP 是Java Web 应用开发的底层技术,而Spring MVC 是Spring 框架中用于解决...

    springmvc spring hibernate整合Demo

    这个"springmvc spring hibernate整合Demo"旨在帮助初学者理解如何将这三个框架协同工作,实现一个完整的CRUD(创建、读取、更新、删除)应用。 Spring MVC 是 Spring 框架的一部分,专门用于构建Web应用程序。它...

    最简单的用户登录与注册系统 spring mvc spring jdbc

    这个项目是一个基于Spring MVC和Spring JDBC的简单用户管理应用,旨在帮助初学者理解如何在实际开发中实现用户登录、注册以及信息修改功能。Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序,而Spring ...

    对于Spring初学者的学习建议借鉴.pdf

    对于 Spring 初学者的学习建议可以归结为六个阶段: Java 基础知识、学习 Spring 入门书籍、研究开源项目、开始做实际项目、继续深入学习、高级用户必读书籍和分析源代码。 一、Java 基础知识 首先,Java 的基础、...

    spring mvc工程-初学者helloworld

    本教程是针对初学者设计的,通过"Spring MVC工程-初学者HelloWorld"项目,我们将深入探讨Spring MVC的基本概念和实践操作。 首先,我们需要一个集成开发环境(IDE),这里使用的是Eclipse。Eclipse是Java开发者常用...

    SpringCloud 15个完整例子

    这个压缩包文件"SpringCloud 15个完整例子"提供了一系列从基础到进阶的示例项目,帮助用户深入理解并实践SpringCloud的各项功能。以下是这些示例中可能涉及的关键知识点: 1. **Spring Cloud Eureka**:作为服务...

    spring类库 spring类库

    这个"spring类库"的压缩包很可能包含了Spring框架的核心jar文件,以及可能的配置示例和文档,是初学者和经验丰富的开发者都非常需要的资源。通过这些文件,开发者可以快速地在项目中引入和使用Spring框架,进行高效...

    Spring框架之快速搭建Spring Boot项目教程指南!0基础!!易懂!!.html

    每个技术点都有详细的解释和相应的源码案例介绍,适合初学者学习和掌握Spring Boot开发技术。 通过本教程,我们详细介绍了如何快速搭建一个Spring Boot项目,包括从环境搭建、项目创建、编写Controller、数据库操作...

    Java_Spring和Hibernate初学者课程的源代码.zip

    Java Spring和Hibernate是两个在企业级Java开发中广泛使用的开源框架。Spring是一个全面的后端开发框架,提供了从依赖注入到事务管理的各种功能,而Hibernate则是一个对象关系映射(ORM)工具,使得开发者可以使用...

    spring+mybatis的java后台项目整合

    在Java后端开发中,Spring和MyBatis是两个非常重要的框架。Spring作为一个全面的开源应用框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等核心功能,而MyBatis则是一个优秀的持久层框架,它简化了...

    spring教程-经典官方教程(适合初学者)

    标题中提到的“spring教程-经典官方教程(适合初学者)”意味着本教程旨在为初学者介绍Spring框架的基础知识和使用方法。Spring是一个广泛使用的Java平台,它提供了全面的编程和配置模型,支持现代Java应用程序的开发...

    spring+struts2+hibernate框架双表增删改查

    在双表操作中,Hibernate的Criteria或HQL(Hibernate Query Language)可以用来执行复杂的查询,包括两个关联表的联合查询。同时,Hibernate还提供了实体的保存、更新和删除功能,简化了数据的增删改操作。 在本...

Global site tag (gtag.js) - Google Analytics