H I B E R N A T E 关联/继承/复合主键配置

全国各城市POI数据2012年-2023-最新整理zip 全国各城市POI数据2012年-2023-最新整理zip 新增2024全国POI矢量数据 数据时间2024年5月 shp格式 36万个数据 数据来源OpenStreetMap 一、全国范围2012、2014、2016、2018、2020、2022年和2023年常用POI数据集 数据是全国范围2012、2014、2016、2018、2020、2022年、2023年常用POI数据集,主要包括:包括餐饮、风景名胜、公共设施、公司企业、停车场、收费站、厕所、服务器等等。 【资源信息】 中文名称: 全国范围POI数据集 显示时间: 2012、2014、2016、2018、2020、2022、2023年 数据来源: 高德地图、百度地图、网络搜集等 数据格式:矢量点数据(shp) 数据坐标:WGS_1984 二、全国各城市POI兴趣点数据 数据年份:2012-2023年 数据范围:每年样本量6000w-9000w POI类别:150+POI兴趣点类别 原始来源:2012-2017年来源于百度,2018-2022来源于高德 数据指标:POI名称,经度,纬度,省份,城市,区域(各年指标有所差别) 立即下载
  rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cchenyiwu%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"> rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5Cchenyiwu%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_editdata.mso"> rel="OLE-Object-Data" href="file:///C:%5CDOCUME%7E1%5Cchenyiwu%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_oledata.mso">

优化知识:

Ø         映射对象实体可以序列化,可以通过实现Serializable接口。序列化意味着我们可以在HttpSession中保存实体对象,或者将其通过RMI传输。

Ø         对于实体类最好不要用final修饰,这将导致Hibernate代理机制难以进行,而代理机制则是Hibernate提高性能的主要途径之一。

一、            一对一引用外键设置

1.  主表(StockWrhBusinessBillDO)

<one-to-one name="stockPutWrhBillDO" class="relate.model.StockPutWrhBillDO" cascade="all" property-ref="stockWrhBusinessBillDO"/>

 

说明:

property-ref="stockWrhBusinessBillDO" :property-ref(可选)被关联从表类中的

对应属性的名字,若没指定,使用被关联类的主键.

Cascade:只在父方设置,有all,delete,update,none;表示父方做了操作,子方跟着做同样的操作

所谓父子关系,是指由父方子方的持久化生命周期,子方对象必须和一个父方对象关联;如果删除父方对象,应该级联删除所有的关联的子方对象。如果子方对象不再和一个父方对象关联,应该把这个子方对象删除。

2.从表(StockPutWrhBillDO)

<many-to-one name="stockWrhBusinessBillDO"

            class="relate.model.StockWrhBusinessBillDO"

            column="WRH_BUSINESS_BILL_ID"

            insert="true"

            update="true"/>

说明:

Column:引用父表的主键字段

Insert、update:如你更新数据(xx,yy),正好数据库有条记录(xx,zz).如果你设置update=true,她就会忽略xx,只更新yy,否则,一并更新,因为做为从表,一般都根据主表的根据主表的更新而一道更新,一般将update设置为true。

注意:

因为many-to-one设置了WRH_BUSINESS_BILL_ID的映射,如果在从表映射文件(.hbm.xml文件)中有个字段设置了WRH_BUSINESS_BILL_ID属性,应该把他注释掉或者去掉。如下:

<!-- property name="WRH_BUSINESS_BILL_ID" type="integer">

                <column name="WRH_BUSINESS_BILL_ID">

                     <comment></comment>

                </column>

</property-->

 

二、一对多关联

1.主表(StockWrhBusinessBillDO)

<set name="stockWrhBusinessBillDetailDOs"

             table="stock_wrh_business_bill_detail"

             cascade="all"

             inverse="true"

             lazy="false">

 

             <key column="WRH_BUSINESS_BILL_ID"></key>

<one-to-many class="relate.model.StockWrhBusinessBillDetailDO"/>

</set>

说明:

Inverse:用于控制反转,将从表被控方转为主控表,当inverse设置为false时,当执行完插入语句,需要对从表附加操作update操作。

Key:key元素的column属性对应从表中,关联的字段

One-to-many:对应从表映射的类

2.从表(StockWrhBusinessBillDetailDO)

<many-to-one name="stockWrhBusinessBillDO"

              class="relate.model.StockWrhBusinessBillDO"

              column="WRH_BUSINESS_BILL_ID"

              insert="true"

              update="true"/>

说明:

Column:引用父表的主键字段

三、hibernate设置 dynamic-update、dynamic-insert

Hibernate允许我们在映射文件里控制insert和update语句的内容.比如在映射文件中<property 元素中的update属性设置成为false,那么这个字段,将不被包括在基本的update语句中,修改的时候,将不包括这个字段了.insert同理.dynamic动态SQL语句的配置也是很常用的.下面介绍配置SQL语句的具体属性:

 1)<property>元素 insert属性:设置为false,在insert语句中不包含这个字段,表示永远不会被插入,默认true

 2)<property>元素 update属性:设置为false,在update语句中不包含这个字段,表示永远不会被修改,默认true

 3)<class>元素 mutable属性:设置为false就是把所有的<property>元素的update属性设置为了false,说明这个对象不会被更新,默认true

4)<property>元素 dynamic-insert属性:设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false

5)<property>元素 dynamic-update属性,设置为true,表示update对象的时候,生成动态的update语句,如果这个字段的值是null就不会被加入到update语句中,默认false

6)<class>元素 dynamic-insert属性:设置为true,表示把所有的<property>元素的dynamic-insert属性设置为true,默认false

7)<class>元素 dynamic-update属性:设置为true,表示把所有的<property>元素的dynamic-update属性设置为true,默认false

 

说明: Hibernate生成动态SQL语句的消耗的系统资源(比如CPU,内存等)是很小的,所以不会影响到系统的性能,如果表中包含N多字段,建议把dynamic-update属性和insert属性设置为true,这样在插入和修改数据的时候,语句中只包括要插入或者修改的字段.可以节省SQL语句的执行时间,提高程序的运行效率.

 

注意:今天做了一个测试,发现Hibernate的dynamic-update只在两种条件下生效:

1.  同一session内,对已经persisit的对象进行update,这里的“已经persist”是指update之前先进行了create或者load调用。代码示例:

Session session = openSession();
User user = (User)session.load(User.class,new Long(12));
user.setAddress(null);
session.update(user);
session.flush();

将hibernate配置成show_sql=true,可以看到update产生的sql语句。

2.   不同session之间,update传入的对象是另一个session中的persist对象(对该对象调用了create或者load方法)。代码示例:

Session session1 = openSession();
User user = (User)session1.load(User.class,new Long(12));

Session session2 = openSession();
user.setAddress(null);
session2.merge(user);
session2.flush();

如果将session2.merge(..)改成update,则会更新所有可更新的属性。

四、复合主键

1.映射文件(.hbm.xml文件)中复合主键配置:

 

2. 建立主键类(TUserPK)

 

 

说明:复合主键的主键类必须实现Serializable接口,实现其两个方法equals(),hashCode(),如下所示:

 

3. Java 类中调用:

 

五、继承 + 一对多关联

              (参见工程:ConnectExtends  

配置文件:ConnectExtends/resource/modules/Animal/hibernate-conf/Animal.hbm.xml)

       

类Cat,Dog继承类Animal,对应三个数据表cat,dog,animal。表cat中的id字段既是主键也是外键,对应于animal表的id字段。类Animaldetail对应数据表animaldetail,其中animalid是外键,映射animal 表的id 字段。

 

映射文件配置如下:

1.  Animal.hbm.xml配置如下:

<set name="animaldetailDOs"

               table="animaldetail"

               inverse="true"

               cascade="all">

 

               <key column="animalid"/>

 

<one-to-many class="animaldetail.model.AnimaldetailDO"/>

</set>

 

 

<joined-subclass name="animal.model.CatDO" table="cat">

<key column="id" />

<property name="catagory" column="catagory" type="java.lang.String"/>

</joined-subclass>

 

<joined-subclass name="animal.model.DogDO" table="dog">

     <key column="id" />

<property name="furcolor" column="furcolor" type="java.lang.String"/>

</joined-subclass>

 

注意:<set>,<joined-subclass>前后数序不能颠倒

 

            Animaldetail.hbm.xml配置如下:

<many-to-one name="animalDO"

                            class="animal.model.AnimalDO"

                   column="animalid"/> 

 

调用操作如下:

            CatDO catDO = new CatDO();

            catDO.setName("CatA");

            catDO.setCatagory("BoSi");

            catDO.setRun("用爬的,BaseAnimal属性");

           

           

            AnimaldetailDO animaldetialDO = new AnimaldetailDO();

            animaldetialDO.setDetailname("动物细节一");

           

            catDO.getAnimaldetailDOs().add(animaldetialDO);

            animaldetialDO.setAnimalDO(catDO);

           

  catDao.doSave(catDO);

               

六、分层结构一张表 + 子类另外一张表混合继承实现

(参见工程:ConnectExtends中food包

配置文件:ConnectExtends/resource/modules/Food/hibernate-conf/Food.hbm.xml)

 

FoodDO有两个子类ProduceFoodDO和ColorFoodDO,ProduceFoodDO有一个子类PricedetailDO

(该例的另外一种实现方式如下例“继承 + 一对以混合使用”所示)

1. .hbm.xml文件配置如下:

<class name="food.model.FoodDO" table="food" lazy="true">

            <comment></comment>

            <id name="id" column="id" type="integer">

                <generator class="increment"></generator>

            </id>

 

            <discriminator column="type" type="java.lang.String"/>

            ……

<subclass name="food.model.ProduceFoodDO" discriminator-value="produce" lazy="false">

<property name="producingarea" column="producingarea" type="java.lang.String" />

 

<!-- discriminator-value 是数据的分组条件,查询时作为过滤条件使用,一旦设置了,就不要修改值 -->

<subclass name="food.model.PricedetailDO" discriminator-value="produce-detail" lazy="false">

                             <join table="pricedetail">

                                <key column="id"></key>

<property name="detaila" column="detaila" type="java.lang.String"></property>

                            </join>

                        </subclass>

            </subclass>

 

<subclass name="food.model.ColorFoodDO" discriminator-value="color" lazy="false">

                <property name="color" column="color" type="java.lang.String"/>

            </subclass>

</class>

 

2. 调用如下:

PricedetailDO pricedetailDO = new PricedetailDO();

        pricedetailDO.setDetaila("粳米uu");

       

        pricedetailDO.setName("大米uu");

        pricedetailDO.setStyle("细长uu");

        pricedetailDO.setProducingarea("江西uu");

           

foodService.save(pricedetailDO);

          

注意: foodservice 提供的方法参数类型是父类类型,参数值为子类对象 (saveFoodDO(FoodDO DO)),在相当大程度提供操作的灵活性,这样你也可以做如下操作:

ColorFoodDO colorFoodDO = new ColorFoodDO();

                   

                    colorFoodDO.setColor("红色");

                    colorFoodDO.setName("胡箩卜");

                    colorFoodDO.setStyle("长条");

                   

    foodService.save(colorFoodDO);

七、继承 + 一对一混合应用

(参见工程:Subclass&amp;one2one)

      

FoodDO有两个子类ColorFoodDO和ProduceFoodDO,子类ProduceFoodDO与PricedtailDO是一对一关联关系

(本例和上例“ 分层结构一张表 + 子类另外一张表混合继承实现”是同一业务的不同实现方式)

 

1. 配置文件 Food.hbm.xml如下:

<class name="food.model.FoodDO" table="food" lazy="true">

                <comment></comment>

                <id name="id" column="id" type="integer">

                    <generator class="increment"></generator>

                </id>

               

                <discriminator column="type" type="java.lang.String"/>

                ……

<subclass name="food.model.ProduceFoodDO" discriminator-value="produce">

<property name="producingarea" column="producingarea" type="java.lang.String"/>

 

                    <one-to-one name="pricedetailDO"

                            class="food.model.PricedetailDO"

                            cascade="all"/>

                </subclass>

 

<subclass name="food.model.ColorFoodDO" discriminator-value="color">

<property name="color" column="color" type="java.lang.String"></property>

                </subclass>

</class>

 

2. 配置文件Pricedetail.hbm.xml如下:

<class name="food.model.PricedetailDO" table="pricedetail" lazy="true">

                <comment></comment>

 

                <id name="id" column="id">

                    <generator class="foreign">

                        <param name="property">produceFoodDO</param>

                    </generator>

                </id>

                ……

<one-to-one name="produceFoodDO" class="food.model.ProduceFoodDO" constrained="true"/>

       </class>

3. 应用操作如下:

            ProduceFoodDO produceFoodDO = new ProduceFoodDO();

           PricedetailDO pricedetailDO = new PricedetailDO();

          

           produceFoodDO.setName("one-to-one 名称");

           produceFoodDO.setProducingarea("中企动力");

           pricedetailDO.setDetaila("one-to-one 细节");

          

           produceFoodDO.setPricedetailDO(pricedetailDO);

           pricedetailDO.setProduceFoodDO(produceFoodDO);

          

foodService.saveFood(produceFoodDO);

   

八、独表继承(union-subclass)

              (参见工程:unionclass)

BaseUserDO有两个子类UserDO和UserHistoryDO;UserDO对应数据表是users,UserhistoryDO对应数据表userhistory。

 

表users:id,name,address,lastlogin

表userhistory:id,name,address,lastmodified

两个表前面三个字段都一样,各自拥有一个特性字段。

 

             

 

1.BaseUser.hbm.xml配置文件如下:

                     <class name="subclass.model.BaseUserDO">

                <comment></comment>

                <id name="id" column="id" type="java.lang.Integer">

 

<!—-这里使用了hilo标识生成器,则在数据库建立对应数据表my_unique_key 表中字段为next_hi ,数据表必须赋予一段数据-->

                    <generator class=" hilo ">

                        <param name="table">my_unique_key</param>

                        <param name="column">next_hi</param>

                    </generator>

                </id>

                <property name="name" type="java.lang.String">

                    <column name="name">

                        <comment></comment>

                    </column>

                </property>

                <property name="address" type="java.lang.String">

                    <column name="address">

                        <comment></comment>

                    </column>

                </property>

               

               

                <union-subclass name="subclass.model.UserDO" table="users">

<property name="lastlogin" column="lastlogin" type="java.lang.String"/>

                </union-subclass>

               

<union-subclass name="subclass.model.UserhistoryDO" table="userhistory">

<property name="lastmodified" column="lastmodified" type="java.lang.String"/>

                </union-subclass>

    </class>

2. 应用操作如下:

            UserDO userDO = new UserDO();

          

           userDO.setName("admin");

           userDO.setAddress("广州大道");

           userDO.setLastlogin(" 2008-07-17 ");

 

    userService.saveBaseUser(userDO);

 

九、自定义类型(继承UserType)

                (对应工程:UserEmails)

Ø         实现目标:有一个用户,对应拥有多个email地址,多个email之间用“;”隔开组装成字符串类型保存在数据表中email字段,在java代码中以List类型展示。

1. UseremailsDO email字段设置如下:

                   private List emails = null;

                           public List getEmails() {

                return emails;

            }

            public void setEmails(List emails) {

               this.emails = emails;

        }

说明:email 类型为 List

         2.  .hbm.xml映射文件如下:

<class name="emails.model.UseremailsDO" table="useremails">

                    ……

                <property name="emails" type="emails.model.UEmailList">

                    <column name="emails">

                        <comment></comment>

                    </column>

                </property>

            </class>

           说明:<property name="emails" type="emails.model.UEmailList">

                  Type为自定义的hibernate类型,它实现了

org.hibernate.usertype.UserType,在下面第四点,我们将介绍它的实现方式。

3.  应用操作如下:

    a)保存操作

            List<String> emailList = new ArrayList<String>();

            UseremailsDO userEmailDO = new UseremailsDO();

 

            emailList.add("d@myce.net");

            emailList.add("e@myce.net");

            emailList.add("f@myce.net");

            userEmailDO.setUsername("wang liu ");

            userEmailDO.setEmails(emailList);

 

            useremailService.saveEmails(userEmailDO);

 

            b) 查询操作

            List list = useremailService.selectEmails();

 

            for(int i=0;i<list.size();i++){

                UseremailsDO userEmailDO = (UseremailsDO)list.get(i);

                System.out.println("UserName:" + userEmailDO.getUsername());

                                             System.out.println("======================================");

                for(int j=0;j<userEmailDO.getEmails().size();j++){

System.out.println("Email[" + j + "]:" + (String)(userEmailDO.getEmails().get(j)));

                }

                System.out.println("");

            }

 

         4. 自定义Hibernate类型(实现UserType接口)

public class UEmailList implements UserType{

 

    private List emailList = null;

    private static final char SPLITTER = ';';

    private static final int[] TYPES = new int[]{Types.VARCHAR};

               

    ……

    //工程UserEmails包含详细实现方式

}

 

十、懒加载

懒加载简单说就是对数据的延迟加载,比如数据的级联操作,下面将介绍如何进行懒加载应用配置。(下面是一个一对多的例子)

 

1.映射文件配置如下(将属性lazy设置为true)

a)         animal.hbm.xml映射配置文件(主要配置部分)

 

<set name="animaldetailDOs"

               table="animaldetail"

               inverse="true"

               cascade="all"

               lazy="true">

 

           <key column="animalid"/>

 

           <one-to-many class="animaldetail.model.AnimaldetailDO"/>

   </set>

                  

b)          animaldetail.hbm.xml映射配置文件(主要配置部分)

<many-to-one name="animalDO"

                                   class="animal.model.AnimalDO"

                   column="animalid"/>

2.操作应用如下:

 

            CatDO catDO = new CatDO();

            catDO = (CatDO)getSession().load(CatDO.class,id);

         3. web.xml 设置过滤器

            <filter>

                <filter-name>hibernateFilter</filter-name>

                <filter-class>         

org.springframework.orm.hibernate3.

support.OpenSessionInViewFilter

                </filter-class>

            </filter>

 

            <filter-mapping>

                <filter-name>hibernateFilter</filter-name>

                <url-pattern>*.do</url-pattern>

            </filter-mapping>

           

  说明:因为过滤器是对url过滤映射处理,所有在测试(TestCase)过程中,懒加载机制不起左右

十一、附件资料

一) 继承

<subclass>:继承的双方子类、父类都在同一张数据表

<joined-subclass>:……子类、父类在不同数据表

<union-subclass>:每个具体类一张表,独表中的某些属性是所有子表所共有

1. <subclass>配置如下:

a) 每个类分层结构一张表

<class name="Payment" table="PAYMENT">

    <id name="id" type="long" column="PAYMENT_ID">

        <generator class="native"/>

    </id>

    <discriminator olumn="PAYMENT_TYPE" type="string"/>

    <property name="amount" column="AMOUNT"/>

    ...

   <subclass name="CreditCardPayment" discriminator-value="CREDIT">

        <property name="creditCardType" column="CCTYPE"/>

        ...

    </subclass>

    <subclass name="CashPayment" discriminator-value="CASH">

        ...

    </subclass>

    <subclass name="ChequePayment" discriminator-value="CHEQUE">

        ...

    </subclass>

</class>

采用这种策略只需要一张表即可。它有一个很大的限制:要求那些由子类定义的字段, 如CCTYPE,不能有非空(NOT NULL)约束。

b) 每个子类一张表,使用辨别标志(Discriminator)

对“每个子类一张表”的映射策略,你可以结合使用<subclass> 与<join>,如下所示:

<class name="Payment" table="PAYMENT">

    <id name="id" type="long" column="PAYMENT_ID">

        <generator class="native"/>

    </id>

    <discriminator column="PAYMENT_TYPE" type="string"/>

    <property name="amount" column="AMOUNT"/>

    ...

    <subclass name="CreditCardPayment" discriminator-value="CREDIT">

        <join table="CREDIT_PAYMENT">

            <property name="creditCardType" column="CCTYPE"/>

            ...

        </join>

    </subclass>

    <subclass name="CashPayment" discriminator-value="CASH">

        <join table="CASH_PAYMENT">

            ...

        </join>

    </subclass>

    <subclass name="ChequePayment" discriminator-value="CHEQUE">

        <join table="CHEQUE_PAYMENT" fetch="select">

            ...

        </join>

    </subclass>

</class>

可选的声明fetch="select",是用来告诉Hibernate,在查询超类时, 不要使用外部连接(outer join)来抓取子类ChequePayment的数据。

C) 混合使用“每个类分层结构一张表”和“每个子类一张表”

                   <class name="Payment" table="PAYMENT">

                            <id name="id" type="long" column="PAYMENT_ID">

                               <generator class="native"/>

                             </id>

                            <discriminator column="PAYMENT_TYPE" type="string"/>

                             <property name="amount" column="AMOUNT"/>

                           

                            <subclass name="CreditCardPayment" discriminator-value="CREDIT">

                                   <join table="CREDIT_PAYMENT">

                                          <property name="creditCardType" column="CCTYPE"/>

                                   </join>

                            </subclass>

<subclass name="CashPayment" discriminator-value="CASH">

……

                            </subclass>

                            <subclass name="ChequePayment" discriminator-value="CHEQUE">

                                     ………

                            </subclass>

</class>

2. <joined-subclass>配置如下:

<class name="Payment" table="PAYMENT">

    <id name="id" type="long" column="PAYMENT_ID">

        <generator class="native"/>

    </id>

    <property name="amount" column="AMOUNT"/>

    ...

    <joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">

        <key column="PAYMENT_ID"/>

        ...

    </joined-subclass>

    <joined-subclass name="CashPayment" table="CASH_PAYMENT">

        <key column="PAYMENT_ID"/>

        <property name="creditCardType" column="CCTYPE"/>

        ...

    </joined-subclass>

    <joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT">

        <key column="PAYMENT_ID"/>

        ...

    </joined-subclass>

</class>

需要四张表。三个子类表通过主键关联到超类表(因而关系模型实际上是一对一关联)。

3. <union-subclass>配置如下:

<class name="Payment">

    <id name="id" type="long" column="PAYMENT_ID">

        <generator class="sequence"/>

    </id>

    <property name="amount" column="AMOUNT"/>

    ...

    <union-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">

        <property name="creditCardType" column="CCTYPE"/>

        ...

    </union-subclass>

    <union-subclass name="CashPayment" table="CASH_PAYMENT">

        ...

    </union-subclass>

    <union-subclass name="ChequePayment" table="CHEQUE_PAYMENT">

        ...

    </union-subclass>

</class>

 

这里涉及三张表。每张表为对应类的所有属性(包括从超类继承的属性)定义相应字段。 这种方式的局限在于,如果一个属性在超类中做了映射,其字段名必须与所有子类 表中定义的相同。(我们可能会在Hibernate的后续发布版本中放宽此限制。) 不允许在联合子类(union subclass)的继承层次中使用标识生成器策略(identity generator strategy), 实际上, 主键的种子(primary key seed)不得不为同一继承层次中的全部被联合子类所共用.

4. 隐式多态如下(在同一个映射文件中,映射多个class):

<class name="CreditCardPayment" table="CREDIT_PAYMENT">

    <id name="id" type="long" column="CREDIT_PAYMENT_ID">

        <generator class="native"/>

    </id>

    <property name="amount" column="CREDIT_AMOUNT"/>

    ...

</class>

 

<class name="CashPayment" table="CASH_PAYMENT">

    <id name="id" type="long" column="CASH_PAYMENT_ID">

        <generator class="native"/>

    </id>

    <property name="amount" column="CASH_AMOUNT"/>

    ...

</class>

 

<class name="ChequePayment" table="CHEQUE_PAYMENT">

    <id name="id" type="long" column="CHEQUE_PAYMENT_ID">

        <generator class="native"/>

    </id>

    <property name="amount" column="CHEQUE_AMOUNT"/>

    ...

</class>

说明:我们没有在任何地方明确的提及接口Payment。同时注意 Payment的属性在每个子类中都进行了映射。如果你想避免重复, 可以考虑使用XML实体(例如:位于DOCTYPE声明内的 [ <!ENTITY allproperties SYSTEM "allproperties.xml"> ] 和映射中的&allproperties;)。

这种方法的缺陷在于,在Hibernate执行多态查询时(polymorphic queries)无法生成带 UNION的SQL语句。

对于这种映射策略而言,通常用<any>来实现到 Payment的多态关联映射。

<any name="payment" meta-type="string" id-type="long">

    <meta-value value="CREDIT" class="CreditCardPayment"/>

    <meta-value value="CASH" class="CashPayment"/>

    <meta-value value="CHEQUE" class="ChequePayment"/>

    <column name="PAYMENT_CLASS"/>

    <column name="PAYMENT_ID"/>

</any>

            对<any>元素中子元素和属性补充说明:

           name: 是持久类中属性名称。

meta-type: 是下面meta-value元素中value的类型,如"string","character"等。

          id-type: 是引用类的主键类型。

meta-value元素中value: 该值将保存到数据库表中,用来标识其后的class,即引用的持久类。请参考下面的数据。

meta-value元素中class: 引用持久类的类全称。

          第一个column: 保存上面value值的字段。

第二个column: 保存引用持久类的主键值的字段,他的类型是id-type对应到数据库中的字段类型。

二) 一对多

    1. 单向一对多关联

       

 

 

智慧交通治理AI大模型多场景协同决策与自适应设计方案.pptx 立即下载

相关推荐

双闭环PWM整流器VOC控制 +SVPWM调制仿真(Simulink仿真实现)

内容概要:本文围绕城市空中交通环境下多无人机协同路径规划问题展开深入研究,重点探讨了在包含建筑物、禁飞区、动态威胁等复杂约束条件下,如何利用仿生优化算法(如布谷鲶鱼优化算法CCO、灰雁优化算法GGO、田忌赛马优化算法THRO)实现安全、高效的多无人机路径规划。文章提出了一种分层规划策略,融合全局路径规划与局部动态避障机制,构建了综合考虑路径长度、威胁暴露度、高度变化及地形碰撞风险的多目标优化模型。通过Matlab仿真平台对多种算法进行对比实验,系统评估了各算法在路径安全性、收敛速度、优化性能和鲁棒性方面的表现,并深入分析了现有方法的局限性,对未来研究方向如动态环境适应、通信受限下的分布式协同等进行了展望。; 适合人群:具备一定编程基础,熟悉Matlab/Simulink仿真环境,从事无人机系统设计、智能交通、自动化控制、路径规划算法研究等相关领域的科研人员及高校研究生。; 使用场景及目标:①应用于城市空中交通系统中多无人机的协同任务执行与动态避障;②为复杂威胁环境下多智能体系统的路径规划提供先进算法支持与仿真验证框架;③辅助研究人员深入理解并复现仿生优化算法在高维、多约束路径规划问题中的具体实现与性能差异。; 阅读建议:此资源以Matlab代码实现为核心,紧密结合理论建模与仿真实验,建议读者在学习过程中重点关注算法的设计原理、参数调优策略及仿真结果的可视化分析,结合文中提供的实验数据进行横向对比,以深刻把握不同仿生算法的搜索机制、适用场景及其在实际工程应用中的潜力与挑战。

Hibernate中复合主键的配置和使用

有关Hibernate的联合主键 对于新系统的设计开发而言,我们应尽量避免在库表中引入与业务逻辑相关的主键关系。 将业务逻辑主键引入库表,以后业务逻辑的变化,将很可能对底层数据库结构产生连带影响。 复合主键的引入,很大程度上意味着业务逻辑已经侵入到数据存储逻辑之中。 因此,应尽量避免。但实际情况中,我们必须面对遗留系统的旧表开发,这时,对现有复合主键的支持就非常必要。 hiberna

haikuotiankong1997的专栏 1万+

仿真+课设Multisim直流可调稳压电源(0-15V)仿真设计基于LM317+LM337【仿真+课程报告】

内容概要:本文详细介绍了一种基于LM317(正压调节)和LM337(负压调节)芯片的Multisim直流可调稳压电源仿真设计方案,输出电压范围为0-15V,具备完整的电路仿真模型与课程设计报告。设计涵盖线性稳压电源的核心原理,包括电压调节机制、元件参数配置、双极性电源构建及仿真测试流程,突出理论与实践结合。文档还附带丰富的扩展资源,如三相PWM整流器、函数信号发生器等仿真项目,并提供百度网盘链接用于获取全套资料,适用于电子类课程设计与自主学习。整体内容系统性强,注重仿真操作指导与工程实践能力培养。; 适合人群:电子信息工程、自动化、电气工程及其相关专业的本科生、专科生,以及正在进行模拟电子技术课程设计或毕业设计的学生。; 使用场景及目标:①深入理解线性稳压电源的工作原理与设计方法;②掌握Multisim软件在电路仿真中的实际应用;③完成基于LM317/LM337的可调稳压电源课程设计任务;④提升模拟电路系统的设计、仿真与分析综合能力; 阅读建议:建议结合Multisim软件同步实践,按照文档电路图逐步搭建仿真模型,重点关注电压调节电路的实现细节与参数设置,并参考所提供的其他仿真资源拓展知识广度,强化工程思维训练。

Hibernate实现复合主键的使用

复合主键的使用 1>:首先将要作为主键的属性首先抽取成单独的实体 并提供get And set方法 并且还需要序列化 2>:在实际的实体中申明主键实体的变量 3>:在映射文件中编写实体的配置文件

GuominJin的博客 4730

阻尼器磁流变阻尼器MR Damper非线性(阻尼、滞回)特性研究(Matlab代码实现)

内容概要:本文围绕磁流变阻尼器(MR Damper)的非线性特性开展深入研究,重点剖析其在动态载荷作用下的阻尼力响应与滞回行为所表现出的强非线性特征,并基于Matlab平台进行系统建模与数值仿真。通过建立能够准确描述MR阻尼器非线性力学行为的数学模型,模拟其在不同激励条件、电流强度和运动频率下的动态响应过程,进而对系统的非线性特性进行定性与定量分析。研究涵盖了模型构建、参数设定、仿真执行与结果可视化等全过程,突出了Matlab在处理复杂非线性系统仿真中的强大功能与工程实用性,为智能材料器件在振动控制领域的应用提供了坚实的理论支撑与技术路径。; 适合人群:具备一定控制理论、机械动力学或智能材料基础知识,熟悉Matlab编程环境的研究生、科研人员及从事振动控制、结构工程等相关领域的工程技术人员。; 使用场景及目标:①用于智能材料与结构领域的科研与教学,帮助深入理解磁流变阻尼器的工作机理与非线性动力学特性;②为车辆半主动悬架系统、建筑结构抗震减震、桥梁风振抑制等实际工程中的振动控制系统设计、仿真验证与参数优化提供技术支持;③作为非线性系统建模、动力学仿真与Matlab编程实践的经典案例,有效提升使用者的系统分析能力和工程软件应用水平。; 阅读建议:建议读者结合文中提供的Matlab代码进行动手实践,通过调整模型参数(如电流、激励幅值与频率)观察系统响应的变化规律,深入探究非线性特性的形成原因与影响因素,并可尝试将该建模方法迁移至其他智能阻尼器件(如压电、电流变阻尼器)的研究中,以拓展应用视野。

全桥LLC谐振(变频+移相混合控制)变换器闭环仿真模型(Simulink仿真实现)

内容概要:本文档详细介绍了一种基于Simulink实现的全桥LLC谐振变换器闭环仿真模型,采用变频与移相混合控制策略,重点研究系统的动态响应、稳态性能及高效软开关特性。内容涵盖系统建模、PI控制器设计、闭环反馈机制构建以及谐振参数的优化配置,全面展示了从理论分析到仿真验证的全过程。通过在不同输入电压与负载条件下进行仿真测试,验证了该模型在提升转换效率、实现零电压开通(ZVS)和精确调控输出电压方面的优越性能。同时,配套提供参数设计报告、仿真说明文档及参考文献,有助于深入理解与复现实验结果。; 适合人群:具备电力电子与电力系统基础知识,熟悉Simulink/Matlab仿真环境,从事高频DC-DC变换器、新能源电源、车载充电机或相关领域研发工作的工程师及高校研究生。; 使用场景及目标:① 掌握全桥LLC谐振变换器的建模方法与闭环控制系统设计流程;② 深入理解变频+移相混合控制在高效率电源变换中的协同作用机制;③ 用于科研项目复现、教学案例演示或工业级电源产品的前期仿真预研;④ 为实际硬件原型开发提供可靠的理论支撑与关键参数设计依据。; 阅读建议:建议结合所提供的仿真文件与设计报告同步操作,重点关注控制环路搭建、谐振腔参数选取及其对系统性能的影响,推荐通过调整负载与输入条件进行多工况仿真分析,有条件者可进一步推进至样机实验验证。

hibernate 外键做联合主键

使用Hibernate的外键作为联合主键: 如:有三张表 product:其字段有 id,proColor,proName。id是主键 orders:字段有 id,amount,date。id是主键 order_details:字段有 proId,orderId,quantity,price。proId和orderId为联合主键,并且proId是product表的外键,orderId是...

u014164005的博客 832

【顶级EI复现】新扩展移相角下的双有源桥DC-DC 变换器优化控制策略(Simulink仿真实现)

内容概要:本文聚焦于“新扩展移相角下的双有源桥DC-DC变换器优化控制策略”,在Simulink环境中实现高性能闭环控制仿真。通过引入改进型扩展移相调制(EPS)策略,结合KKT最优性条件与分段解析优化方法,系统实现了软开关(ZVS/ZCS)的精确控制,有效降低了功率器件的电压电流应力,提升了变换器在高频、高压隔离场景下的转换效率与动态响应能力。文档详细阐述了控制逻辑的设计原理与参数整定方法,并提供完整的Matlab/Simulink仿真模型与代码,确保研究成果可复现、可拓展,已通过顶级EI期刊标准验证,具备高精度、强鲁棒性的工程应用价值。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、高校科研人员,以及从事新能源发电、电动汽车、微电网、储能系统等领域的技术研发工程师;尤其适用于需复现高水平论文成果的研究者。; 使用场景及目标:①深入理解双有源桥(DAB)变换器的工作机理与先进移相控制策略;②掌握基于Simulink的电力电子系统建模、仿真与优化技术;③复现并验证EI级期刊论文中的控制算法,支撑学术论文撰写、课题申报或实际工程原型开发。; 阅读建议:建议读者结合“改进型EPS调制”“软开关实现条件”“最小应力优化目标”等核心技术要点,利用所提供的仿真模型进行分模块调试与参数扫描分析,深入探究控制环路设计逻辑与系统稳定性边界,同时可参考荔枝科研社资源目录获取同类案例以拓宽研究思路和技术视野。

hibernate 继承映射 joined-subclass

package subclass.map;/** * 普通员工 * @author wangtao * */public class Staff { private int id; private String name; public int getId() { return id; } public void setId(int

天下无双 6991

(Multisim课设资料)最全面函数信号发生器(三角波+正弦波+方波信号+锯齿波仿真设计+报告文档

内容概要:本文档是一份关于“(Multisim课设资料)最全面函数信号发生器”的综合性学习资源,系统介绍了三角波、正弦波、方波和锯齿波四种基本信号的Multisim仿真设计与实现方法。资源包含完整的电路设计方案、仿真操作流程及课程设计报告模板,详细阐述了各波形的生成原理、核心元器件选型依据、关键参数调节策略以及仿真结果验证过程。通过模块化电路搭建,帮助学习者掌握波形转换机制与模拟电路集成技术,涵盖从理论分析到实践操作的完整链条。此外,文档还整合了直流稳压电源、滤波器设计等相关电子系统仿真案例,形成配套丰富的课设支持体系,适用于电子类课程设计与工程实训参考。; 适合人群:电子信息工程、自动化、电气工程及其相关专业的本科学生及初级学习者,具备电路基础理论和Multisim软件基本操作能力的人员;特别适用于正在开展模拟电子技术课程设计、毕业设计或课外实践项目的使用者。; 使用场景及目标:①深入理解函数信号发生器中四种典型波形的产生机理与电路拓扑结构;②熟练掌握Multisim平台下的电路建模、仿真调试与数据分析技能;③完成高质量课程设计报告撰写,提升综合实践能力;④为后续电子系统设计与信号处理课程打下坚实基础。; 阅读建议:建议结合文档中的电路图与仿真步骤循序渐进地动手实践,重点关注不同波形间的转换关系与元件参数对输出特性的影响,同时参照所提供的报告范本规范实验记录与成果输出,强化理论与实践的深度融合。

【全局灵敏性】【蒙特卡洛敏感性指数估计和多精度策略】基于方差的全局敏感性分析(Matlab代码实现)

内容概要:本文围绕“面向城市空中交通的多无人机路径规划研究”展开,系统阐述了多无人机在复杂城市环境中进行高效、安全路径规划的理论与方法。研究首先明确了问题定义、约束条件与性能指标,提出了一套融合改进RRT算法与图论方法的全局路径规划框架,并结合动态风险场与模型预测控制(MPC)及动态窗口法(DWA)实现动态避障。为进一步提升多机协同能力,引入了基于分布式协同控制的局部冲突消解机制,确保多无人机在密集环境中的安全飞行与任务完成。通过多场景仿真实验验证了所提方法的有效性、鲁棒性与可扩展性,充分展示了其在城市物流、应急救援与智慧巡检等实际应用中的巨大潜力; 适合人群:具备一定编程基础与控制理论知识,从事无人机系统、智能交通、自动化控制、人工智能或相关领域的研究生、科研人员及工程技术开发者; 使用场景及目标:①应用于城市空中交通管理、多无人机协同配送、灾害应急响应、智能安防巡查等复杂动态环境下的任务场景;②目标在于实现高密度城市空间中无人机的安全避障、高效路径生成、多机协同调度与实时动态调整,推动城市低空智能化交通系统的构建与发展; 阅读建议:建议结合文中提供的Matlab代码进行仿真实践,深入理解算法实现细节与关键参数调优策略,同时配合相关文献拓展对路径规划、协同控制与智能决策理论的认知,以全面提升科研与工程应用能力。

Java笔记:Hibernate关联の继承与联合主键

一个IT专业的学生记录日常中的点滴,当作笔记把。 自己本身也比较懒,写SSH的一个项目时,用到了继承和联合主键,以前没怎么关注,就去度娘了下,自己写的过程中遇到了不少问题,花了一整天让我很不爽,记下来以防再犯。 继承关联: 继承关联分为几种情况: 一:整个继承树映射到一张表; 二:父类建立一张表存放公共属性,每个子类一张表,存独立属性。 三:父类子类都各一张表(这种情况效率较低

尼尧Nier的博客 597

大模型智能体LLM急速入门

大模型智能体LLM急速入门

工作中使用到的单词(软件开发)_第四版

本文汇总了2020-2025年间软件开发相关的工作笔记,主要包括三版技术词汇整理(2020-2025)、优快云文章导出PDF情况,以及2025年6月的专题整理。重点内容涉及:WebSphere中jackson包加载路径问题、Java异步线程类型(守护/非守护线程)的区分与解决方案、DB2数据库连接相关指令(db2listapplications等)、AWS托管服务优势,以及OSGi框架与Java的关系说明。特别标注了技术术语的英文发音(如initiative)和敏感信息处理注意事项(敏感度标签设置)。后续

sun0322 1343

SAP PI实战:5分钟搞定REST适配器同步接口配置(含Postman测试技巧)

本文详细介绍了如何在SAP PI中快速配置REST适配器同步接口,包括ESR设计、集成流配置及Postman测试技巧。通过实战步骤和关键参数设置,帮助开发者高效实现系统集成,特别适合需要实时数据交互的业务场景。

weixin_33738555的博客 485

通过PXE的方式实现Ubuntu 24.04 自动安装

之前都是通过PXE来自动化安装Redhat系列的,例如:Rocky9、Rocky10、CentOS7、银河麒麟 Kylin-V10、Kylin-V11、OpenEuler 24.03等。现在安装Ubuntu系列的跟红帽的不太一样,所以在这里介绍下。

邢宇宇的博客 1490

前端学 Java 课程笔记

面向前端开发人员:大量以前端概念类比

estrusKing的博客 230

Voronoi算法构建多晶

孪晶多晶 采用孪晶的原子链作为种子通过voronoi算法可以得到孪晶多晶结构。 孪晶种子: txt文件不需要特殊设置 box 150 150 150 random 8 得到孪晶多晶: 通过改变孪晶种子的长度可以得到不同孪晶片层厚度的多晶。 准二维柱晶 所有晶粒在某一维度的晶向一致,晶粒仅在平面内具有旋转关系,所有晶界为旋转对称晶界,这种结构的多晶其位错滑移在某些方向受限,但是能极大的提高晶粒...

yamatachi的博客 5279

云原生技术问题

整体流程涉及DNS、ARP、TCP、IP、HTTP核心协议,完整过程如下:首先进行DNS解析,将域名解析为服务器IP,依次查询浏览器缓存、系统hosts、本地DNS缓存,未命中则向DNS服务器迭代查询。核心区别:TCP是面向连接的可靠传输协议,需三次握手建连,具备重传、校验、流量控制、拥塞控制机制,报文开销大、传输延迟高;traceroute利用ICMP超时报文:通过逐级递增数据包TTL值,每经过一台路由器TTL减1,TTL归零后路由器返回ICMP超时报文,以此获取链路所有路由节点IP,定位故障链路。

2303_81849819的博客 464

Dify视觉模型节点避坑指南:我用Qwen2.5-VL做OCR识别时踩过的3个坑(及解决方案)

本文分享了使用Dify平台和Qwen2.5-VL视觉模型进行OCR票据识别时遇到的三个常见问题及解决方案,包括文件变量传递、结构化输出和条件分支判断失效。通过实战经验,帮助开发者优化多模态模型在财务自动化中的应用,提升OCR识别精度和效率。

weixin_29284885的博客 401

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-差分信号

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的差分拓扑进行说明,以下图为例,准备好发送接收端的IBIS模型, (ibis_se.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 440

软考——架构师笔记

该文章可作为系统架构设计师考试的参考笔记。

weixin_43930239的博客 697

RH850从0搭建Autosar开发环境【1】- 如何创建Davinci Configurator配置工程

当我们在公司接触Autosar开发环境时,基本都是完整的Davinci Configurator的配置工程,我们只能修修补补。 从本章开始将手把手搭建Rh850基于Vector公司Davinci Configurator的autosar配置工程。主要涉及到OS,COM,DCMM,NVM,BSWM,ECUM等基本模块,包括Vlink,memap使用,XCP标定的实现等。基本是实现一个基础版的项目开发。包括后期的GreenHills编译问题处理,生成最终的Hex文件。

weixin_42412049的博客 1万+
上一篇: H I B E R N A T E 错误集锦
下一篇: 懒加载
TechChan
博客等级 码龄18年 140粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值