0 0

Hibernate保存子表更新父表0

现在有两个对象 一个是模型对象 一个模型属性对象 他们的关系是1对多的关系 

模型对象如下:

public class Model implements java.io.Serializable {

    private String modelId; //模型ID
    private String modelName; //模型名称
    private Set mapRelation = new HashSet(0); //映射关系
    private Set modelProperties = new HashSet(0); //模型属性

    public Model() {
    }

    public Model(String modelId) {
        this.modelId = modelId;
    }

    public Model(String modelId,  String modelName,
            Set mapRelation, Set modelProperties) {
        this.modelId = modelId;
        this.modelName = modelName;
        this.mapRelation = mapRelation;
        this.modelProperties = modelProperties;
    }

    public String getModelId() {
        return modelId;
    }

    public void setModelId(String modelId) {
        this.modelId = modelId;
    }

    public String getModelName() {
        return modelName;
    }

    public void setModelName(String modelName) {
        this.modelName = modelName;
    }

    public Set getMapRelation() {
        return mapRelation;
    }

    public void setMapRelation(Set mapRelation) {
        this.mapRelation = mapRelation;
    }

    public Set getModelProperties() {
        return modelProperties;
    }

    public void setModelProperties(Set modelProperties) {
        this.modelProperties = modelProperties;
    }
}


模型属性:

public class ModelProperties implements java.io.Serializable {

    private String modelPropertId; //模型属性ID
    private Model model;  //模型
    private String propertName; //属性名
    private String propertType; //属性类型

    public ModelProperties() {
    }

    public ModelProperties(String modelPropertId) {
        this.modelPropertId = modelPropertId;
    }

    public ModelProperties(String modelPropertId, Model model, String propertName,
            String propertType) {
        this.modelPropertId = modelPropertId;
        this.model = model;
        this.propertName = propertName;
        this.propertType = propertType;
        
    }

    public String getModelPropertId() {
        return modelPropertId;
    }

    public void setModelPropertId(String modelPropertId) {
        this.modelPropertId = modelPropertId;
    }

    public Model getModel() {
        return model;
    }

    public void setModel(Model model) {
        this.model = model;
    }

    public String getPropertName() {
        return propertName;
    }

    public void setPropertName(String propertName) {
        this.propertName = propertName;
    }

    public String getPropertType() {
        return propertType;
    }

    public void setPropertType(String propertType) {
        this.propertType = propertType;
    }

}


他们的hbm.xml文件如下

<hibernate-mapping>
    <class name="com.carnation.domain.Model" table="T_QO_MODEL" >
        <id name="modelId" type="java.lang.String" unsaved-value="null">
            <column name="MODELID" length="64" />
           <generator class="uuid.hex"></generator>
        </id>
        <many-to-one name="rule" cascade="all"  class="com.carnation.domain.Rule" fetch="select">
            <column name="RULEID" length="64" />
        </many-to-one>
        <property name="modelName" type="java.lang.String" >
            <column name="NAME" length="20" />
        </property>
        <set name="mapRelation" inverse="true">
            <key>
                <column name="MODELID" length="64" />
            </key>
            <one-to-many class="com.carnation.domain.MapRelation" />
        </set>
        <set name="modelProperties" inverse="false">
            <key>
                <column name="MODELID" length="64" />
            </key>
            <one-to-many class="com.carnation.domain.ModelProperties" />
        </set>
    </class>
</hibernate-mapping>






<hibernate-mapping>
    <class name="com.carnation.domain.ModelProperties" table="T_QO_PROPERTIES" >
        <id name="modelPropertId" type="java.lang.String" unsaved-value="null">
            <column name="MODELPROID" length="64" />
          <generator class="uuid.hex"></generator>
        </id>
        <many-to-one name="model" cascade="all" class="com.carnation.domain.Model" fetch="select">
            <column name="MODELID" length="64" />
        </many-to-one>
        <property name="propertName" type="java.lang.String">
            <column name="NAME" length="20" />
        </property>
        <property name="propertType" type="java.lang.String">
            <column name="TYPE" length="20" />
        </property>
        <set name="propertSqlcolMap" inverse="true">
            <key>
                <column name="MODELPROID" length="64" />
            </key>
            <one-to-many class="com.carnation.domain.PropertSqlcolMap" />
        </set>
    </class>
</hibernate-mapping>



我想在保存模型属性对象的时候 设置模型属性对象表的模型ID为8a8080a637ab74950137ab7499c30002,其中模型表已经存在id为8a8080a637ab74950137ab7499c30002的记录 也就是我想保存模型属性对象的时候 不需要更新模型表 因为如果更新模型表的话 会导致模型表id为8a8080a637ab74950137ab7499c30002的记录别的字段为空 我应该怎么写才能到达效果或者怎么配置,下面是我的测试代码

public void testSave() {
    
        ModelProperties mp = new ModelProperties();
        mp.setPropertName("用户名");
        Model model = new Model();
        model.setModelId("8a8080a637ab74950137ab7499c30002");
        //model = (Model)ruleDao.load("8a8080a637ab74950137ab7499c30002");  //难道只能用这种方式吗?这样感觉不太适合吧
        mp.setModel(model);
        ruleDao.saveEntity(mp);
    }


2012年6月02日 14:05
目前还没有答案

相关推荐

    hibernate many-to-many级联保存,级联更新,级联删除

    1. `save-update`:当保存或更新父实体时,会自动保存或更新所有关联的子实体。 2. `merge`:在调用`session.merge()`时,不仅合并父实体的状态,也会处理所有关联的子实体。 3. `delete`:删除父实体时,会同时删除...

    hibernate父亲与孩子

    在数据库设计中,"父亲"和"孩子"的概念通常对应于实体之间的关联关系,例如,一个部门(父)可以有多个员工(子),或者一个员工(父)可以属于一个部门(子)。在Hibernate中,这种关系可以通过配置XML映射文件或...

    struts2+hibernate+spring多表操作示例

    级联保存时,只需要保存父对象,Hibernate会自动保存关联的子对象;级联删除则可以删除父对象时,同时删除所有关联的子对象。 5. **性能优化**:在实际应用中,为提高性能,可以采用懒加载(Lazy Loading)减少不必...

    JavaEE学习笔记之Hibernate表关系之一对多(inverse详解)

    1. **关联的插入和更新**:在一对多关系中,如果设置`inverse="true"`,那么在保存或更新父实体时,Hibernate会自动处理与子实体的关联,添加新的子实体或更新已存在的关联。相反,如果在子实体上操作,Hibernate将...

    hibernate一对多项目

    在一对多关系中,通常先保存父实体(“一”的一方),再保存子实体(“多”的一方),并设置它们之间的引用关系。 - 查询数据时,可以使用Session的`load()`或`get()`方法获取实体,也可以使用HQL(Hibernate Query...

    Hibernate 关联关系解除

    例如,CascadeType.REMOVE会删除父实体时同时删除子实体。 3. 手动处理:在某些情况下,可能需要手动调用Session的delete()方法来删除关联实体。 三、源码理解 理解Hibernate如何处理关联关系解除,需要查看其内部...

    hibernate一对多关联映射(单向关联)

    通常,Hibernate会在子实体(Order)的表中创建一个引用父实体(User)主键的外键。 在配置文件(如hibernate.cfg.xml或application.yml)中,我们需要设置实体的映射文件或使用注解扫描来告诉Hibernate这些实体的...

    hibernate多对一关联关系

    - 当你保存或更新一个子实体时,如果启用了级联操作,Hibernate会自动处理与之关联的父实体,确保数据的一致性。 7. **级联删除**: - 要小心使用`CascadeType.DELETE`,因为它可能导致意外删除。如果一个父实体...

    hibernate_second2项目源码

    在进行级联保存时,先保存或更新父对象,然后是子对象,确保关联关系的正确建立。 4. **性能考虑**:虽然级联操作方便,但如果不小心可能会导致大量的数据库操作,影响性能。因此,在实际使用中,需要根据业务需求...

    hibernate学习入门一对多实体映射源码

    1. 插入数据时,先创建父实体,然后在子实体中设置父实体的引用,最后保存子实体。Hibernate会自动处理外键的插入。 2. 查询时,可以从父实体获取所有子实体的集合,也可以从子实体查询其父实体。 3. 更新和删除时...

    hibernate相关jar包

    @Cascade注解可以设置级联操作,如保存父对象时自动保存子对象。 综上所述,"hibernate相关jar包"提供了开发Java应用程序所需的所有基本组件,使开发者能够充分利用Hibernate的优势,简化数据库操作,提高开发效率...

    hibernate_second项目源码

    项目中的源码将展示如何使用Hibernate保存、更新、查询和删除数据。这包括了如何添加新的关联对象,如何更新已存在的关联,以及如何查询和删除数据。 通过详细研究**hibernate_second**项目,开发者不仅可以掌握...

    Hibernate\hibernate3.2官方中文参考手册PDF

    10. **实体的级联操作**:级联操作允许在一个操作中处理关联的对象,例如,当删除一个父对象时,可以选择同时删除所有子对象。 以上只是《Hibernate 3.2 官方中文参考手册》中的一部分内容,实际文档中还包括了更多...

    hibernate annotations 中文参考手册

    例如,`CascadeType.PERSIST` 表示当保存父实体时也自动保存其子实体。 ##### 映射策略 Hibernate 提供了多种不同的映射策略来处理一对多和多对多关系: - **表关联**:通过额外的关联表来维护关系。 - **外键关联*...

    hibernate3.5完整jar

    7. **事件监听器**:Hibernate 3.5支持事件监听机制,允许开发者注册监听器来拦截特定的持久化操作,如保存、更新、删除等,从而实现自定义的业务逻辑。 8. **级联操作**:在关联映射中,可以设置级联操作,比如在...

    hibernate官网jar包

    12. **级联操作**:通过`@Cascade`可以配置级联操作,如在删除父对象时,是否同时删除子对象。 13. ** Hibenate Validator**:Hibernate 还集成了Validator框架,用于校验实体对象的属性值,提供了一套强大的验证...

    hibernate api

    2. **Session**: Session是与数据库交互的主要接口,它实现了事务管理和对象的保存、更新、删除等操作。Session也负责对象的加载和查询,以及缓存管理。 3. **Criteria API**: Hibernate 3.0引入了Criteria API,...

    hibernate bag 集合映射

    这里,`propertyName`是Java对象中的集合属性名,`inverse="true"`表示子表的维护由父表负责,`key column`是外键列名,`one-to-many`指定与bag关联的实体类。 2. **注解映射**:如果使用注解,映射将在Java实体类...

    hibernate3.6.0

    5. **会话(Session)**:Session是Hibernate的主要工作接口,负责在应用程序和数据库之间进行交互,它提供了对象的保存、更新、删除和查询等操作。 6. **查询语言(HQL)**:Hibernate Query Language,类似SQL,...

    Hibernate入门(代码+笔记)

    接下来,将介绍如何进行基本的CRUD操作:保存(Save)、更新(Update)、删除(Delete)和查询(Query)。基本查询可以通过Criteria API或HQL(Hibernate Query Language)实现,它们都提供了面向对象的方式来检索...

Global site tag (gtag.js) - Google Analytics