Customer

/xml配置文件/Hibernate的类的配置/Customer.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
<hibernate-mapping> 
    <class name="com.domain.Customer" table="cst_customer1">
        <id name="cust_id" column="cust_id">
        
        <!--hibernate在操作数据库时一般使用native,assigned,uuidid主键生成策略:
        第一种:assigned主键策略需要在添加数据时自己设置id,因为它不能自动生成id,    第二种:native为id自动生成策略,生成的是数字id,添加数据到mysql数据库时不需要设置id的值,使用方法如下,实体类id属性为int类型。    第三种:uuid会自动生成32进制uuid主键,添加数据到mysql数据库时不需要设置id的值,如果将id设置为这种策略,那么实体类id属性必须要定义成字符串string类型。-->
            <generator class="native"></generator>
        </id>
        
        <!-- name和column一样时,column可以省略不写 -->
        <property name="cust_name" column="cust_name"></property>
        <property name="cust_source" column="cust_source"></property>
        <property name= "cust_industry" column="cust_industry"></property>
        <property name="cust_level"></property>
        <property name="cust_address"></property>
        <property name="cust_phone"></property>
        
        <!-- 配置一对多的关系 customer对象是linkman-->    
        <!-- name:集合的名字,即Cutomer类里private Set<Linkman> SerLinkman;        
            实际测试一定要Set,private List<Linkman> SerLinkman这么配置会报错。
            设置inverse="true"使其放弃外键维护,否则会在设置外键时出现冗余sql代码
            保存时先保存1再保存多,不然还是会出现update代码。
            在一的一方设置cascade="save-update",保存一的一方数据时会自动多方的数据
        key-column:外键字段名,会出现在多表,需要设置和linkman.hbm.xml的many-to-one
            的column一样,不然会在多表出现两个外键
        set:class:多的一方的全限定名(类的全名) -->
        <set name="SetLinkman" inverse="true" cascade="save-update,delete"
             lazy="false">
            <key column="wj_cust_id"></key>
            <one-to-many class="com.domain.Linkman"/>
        </set>    
        <!--linkman的外键设置非空可以发现:
        如果代码是c.getSet().add(l),则会在保存c和l后update l加上外键,
        此时一定会导致冗余sql,c和l的保存顺序看代码怎么写。        如果代码是l.setCustomer(c),会先保存c再保存l,且l已经设置好外键,没有冗余。
        如果在c方设置inverse="true"会是c.getSet().add(l)失效,从而达到没有冗余
        的效果,实际上只要保证不用c.getSet().add(l)就不会出现冗余。-->

        <!-- 同时在c设置inverse="true"和cascade="save-update",
        c.getSet().add(l)然后save(c)会保存c和l,但是没有外键关系,
        l.setCustomer(c)然后save(c)会保存c不保存l。多对多的情况一样。
        多对多不用级联,尤其要避免级联删除。
        -->        
        <!--lazy="false"用于确定是否延迟跨表查询。默认true,即延迟。
        如果在customer里设置需要设在set上,表示查询customer时不会马上
        查询它有哪些linkman,需要用SetLinkman再查询。
        如果在linkman里设置需要设在many-to-one上,表示查询linkman时不会马上
        查询它的customer,需要用customer时再查询。如果当前session已经查询过
        该customer,则直接使用,不会去数据库查询。
        调试时发现一件事,比如customer设置了延迟,那么在使用前用鼠标查看该
        customer,程序会马上发送查询语句查看SetLinkman。-->            

    </class>
</hibernate-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值