`
liutjedu
  • 浏览: 46888 次
  • 性别: 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 编程。它...

    Servlet,JSP和Spring MVC 初学指南源码

    这份初学指南源码涵盖了这三个重要技术的基础知识,为初学者提供了一个良好的学习起点。 Servlet是Java平台上的一个标准,用于扩展服务器的功能。它是一个Java类,用于接收和响应来自Web客户端的请求。Servlet生命...

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

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

    Spring Cloud 系列脚手架项目,面向 Spring Cloud 初学者

    Spring Cloud 和队列的其他框架一样,说到底只是一个工具。其实没有什么涉及可言,只要花点时间实践一下,人人都可以使用。工具的使用都是一样的,所以使用手册也是大同小异。当然,使用姿势正确得当,系统更加稳定...

    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 框架中用于解决...

    springcloud的简单demo,适合初学,简单易懂

    总之,这个“springcloud的简单demo”为初学者提供了一个很好的起点,通过实际操作,你可以快速掌握SpringCloud和Eureka的基本用法,进一步探索微服务架构的世界。在学习过程中,建议结合官方文档和社区资源,不断...

    Spring项目初学 (二)

    总的来说,"Spring项目初学(二)"是一个理想的起点,它将帮助初学者理解Spring的基本概念,如IoC、DI和类的继承,同时学习如何在实际项目中配置和使用Spring框架。通过实践这个项目,你可以逐步掌握Spring的核心...

    Spring-Security-Demo

    SpringSecurity,这是一种基于Spring AOP和Servlet过滤器的安全框架。...本实例简单配置了springsecurity权限控制,提供admin,user两个用户,在页面登录时以不同角色可访问不同页面,初学者可加以参考此例 谢谢!

    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 的基础、...

    初学搭建springcloud项目

    初学者,自己仿者搭建了个demo,注册中心,配置中心,分布式项目

    spring mvc工程-初学者helloworld

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

    SpringCloud 15个完整例子

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

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

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

Global site tag (gtag.js) - Google Analytics