`
liutjedu
  • 浏览: 46656 次
  • 性别: 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代码+手动书写配置文件] 这样“原始粗糙”的模式,将很难保证不出差错。

相关推荐

    Servlet JSP和Spring MVC初学指南

    Servlet JSP和Spring MVC初学指南

    初学spring最佳教程

    初学spring者的福音。 spring简介 spring应用 spring整合hibernate spring整合struts

    springDemo初学入门

    "springDemo初学入门"这个主题旨在引导初学者掌握Spring框架的基本用法。在这个压缩包中,可能包含了一个简单的Spring项目实例——myWebProject,这是一个基础的Web项目,用于演示Spring的核心功能。 1. **Spring...

    Spring初学者入门教程 PDF带书签高清版

    Spring框架是Java开发中最受欢迎的轻量级框架之一,它为构建企业级应用程序提供了全面的解决方案。...希望这个教程能帮助初学者顺利迈入Spring的世界,为成为一名专业的Java开发者打下坚实的基础。

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

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

    初学Spring+SpringMVC+MyBatis框架(适合初学者看相对完整些)

    这个压缩包文件可能是针对初学者的一个教程或者项目实例,旨在帮助他们理解并掌握这三个框架的集成与使用。 首先,Spring框架作为基础,它是一个全面的企业级应用开发框架,提供了依赖注入(Dependency Injection, ...

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

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

    初学者spring必看教程.zip

    Spring框架是Java开发中的一个核心框架,尤其对于初学者来说,掌握Spring技术栈至关重要。Spring以其模块化、轻量级和全面的企业级应用支持而闻名。这个"初学者spring必看教程.zip"压缩包文件很可能包含了帮助新手...

    Spring与Hibernate框架整合案例之数据库添加数据(经典入门案例,适合初学者,不看后悔)

    以上就是Spring与Hibernate整合的典型流程,这个案例将帮助初学者理解如何在实际项目中运用这两个框架进行数据库操作。通过这个教程,你可以学习到Spring的依赖注入、AOP、事务管理以及Hibernate的ORM机制,为后续更...

    spring boot 初学者实战总结.zip

    本资源提供了一个全面的实战总结,包括项目搭建、基本配置、RESTful API 开发、数据库操作、安全性配置等多个方面,帮助初学者全面理解和应用 Spring Boot。 #### 主要特性 1. **快速项目搭建**: - **Spring ...

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

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

    Spring HttpInvoker 初学实例

    org.springframework.remoting.httpinvoker最基本的实现例子,这是3个eclipse的JavaEE工程,全部导入即可,能运行。 初学可以轻松了解Spring HttpInvoker 的结构和使用。

    ServletJSPSpringMVC初学指南.zip

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

    Spring-Security-Demo

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

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

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

    初学搭建springcloud项目

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

    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)工具,使得开发者可以使用...

Global site tag (gtag.js) - Google Analytics