Hibernate中实现one-to-many

博主研究Hibernate中one-to-one和one-to-many关系,发现将hibernate-mapping中generator的class设为uuid.hex,数据库主键设为varchar可实现表关系。但主键改成int型标识时会弹出异常,还贴出主键设为uuid.hex时的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近两天来在研究Hibernate中的one-to-one和one-to-many的问题,做了很多试验,发现实现表关系时,在hibernate-mapping中generator的class设为uuid.hex,上述的两种关系可以实现,也就是数据库的主键设为varchar(MSSQL2000),但是主键改成int型的标识却弹出“ERROR SessionImpl:2379 - Could not synchronize database state with session”和“net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row not found)”异常,百思不得其解。下面贴出主键设为uuid.hex时的实现代码:

Child.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
    <class name="test.pojo.Child" table="child">
        <id name="cid" column="cid" >
            <generator class="uuid.hex"/>
        </id>
        <property name="cname" column="cname" />
        <many-to-one name="parent" column="pid" />
    </class>
</hibernate-mapping>

Child.java

package test.pojo;

public class Child {
    private String cname;
    private String pid;
    private Parent parent;
    private String cid;
    public Child() {
    }

    public String getCid() {
        return cid;
    }

    public void setCid(String cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public String getPid() {
        return pid;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }

    public Parent getParent() {
        return parent;
    }

    public void setParent(Parent parent) {
        this.parent = parent;
    }
}

Parent.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
    <class name="test.pojo.Parent" table="parent" >
        <id name="pid" column="pid" type="integer">
            <generator class="uuid.hex" />
        </id>
        <property name="pname" column="pname" />
        <set name="child" lazy="true" inverse="true" cascade="all">
            <key column="cid" />
            <one-to-many class="capinfo.negroup.test.pojo.Child"/>
        </set>
    </class>
</hibernate-mapping>

Parent.java
package test.pojo;

import java.util.HashSet;

public class Parent {
    private String pname;
    private java.util.Set child = new HashSet();
    private String pid;
    public Parent() {
    }

    public String getPid() {
        return pid;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

    public java.util.Set getChild() {
        return child;
    }

    public void setChild(java.util.Set child) {
        this.child = child;
    }

}

TestHibernate.java
package test.pojo;

public class TestHibernate {
    public TestHibernate() {
    }

    public static void main(String[] argv) {
        //先建立多的初始数据
        Child child = new Child();
        child.setCname("kerry");
        //再建立一的初始数据
        Parent parent = new Parent();
        parent.setPname("Kelphen");
        //将多的数据放入到一里
        parent.getChild().add(child);
        //再将一放到多里,这样一与多互相拥有对方
        child.setParent(parent);
        try {
            BaseDAOHibernate.saveObject(parent);
        }
        catch (DAOException daoe) {
            daoe.printStackTrace();
        }
    }
}

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值