动态模型

2023-05-16

1 动态模型

1.1 说明

动态模型是指模型的属性是不固定的,可以添加和变更;也指不同模型,可以增加模型。不同模型在存储上为了性能和隔离,使用不同的表。但逻辑编写为了复用,一般使用同一个java类型。以下介绍如何对应。

1.2 java类

java类分固定属性和动态属性,固定属性直接建立属性即可,动态属性使用map类型。例如下面例子:

public class DynamicEntity extends BaseEntity {

    /**
     * 
     */
    private static final long serialVersionUID = 5907806428272321127L;

    /**
     * 
     */
    private Map<String, Object> dynamicProperties = new HashMap<String, Object>();

    /**
     * 获取dynamicProperties.
     * 
     * @return the dynamicProperties
     */
    public Map<String, Object> getDynamicProperties() {
        return dynamicProperties;
    }

    /**
     * 设置dynamicProperties.
     * 
     * @param dynamicProperties
     *            the dynamicProperties to set
     */
    public void setDynamicProperties(Map<String, Object> dynamicProperties) {
        this.dynamicProperties = dynamicProperties;
    }

}


public class YwEntity extends DynamicEntity {

    /**
     * 
     */
    private static final long serialVersionUID = -7655851107507073267L;


    private Integer gid;

    /**
     * billid .
     * 
     */
    private Integer billid;

    /**
     * 获取billid.
     * 
     * @return the billid
     */
    public Integer getBillid() {
        return billid;
    }

    /**
     * 设置billid.
     * 
     * @param billid
     *            the billid to set
     */
    public void setBillid(Integer billid) {
        this.billid = billid;
    }


}

1.3 hbm配置文件

由于一个模型对应多个数据库表,需使用 entityName 查询。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class entity-name="entity1001" name="com.demo.YwEntity"
        table="entity1001">
        <id name="gid" type="java.lang.Integer">
            <generator class="assigned" />
        </id>
        <property name="gid" type="java.lang.String">
            <column name="gid" />
        </property>
        <property name="billid" type="java.lang.Integer">
            <column name="billid" />
        </property>
        <dynamic-component insert="true" name="dynamicProperties"
            optimistic-lock="true" unique="false" update="true">
            <property name="rq" type="java.util.Date">
                <column name="rq" />
            </property>
            <property name="ZBXM1" type="java.lang.String">
                <column name="ZBXM1" />
            </property>
            <property name="ZBXM2" type="java.lang.String">
                <column name="ZBXM2" />
            </property>
            <property name="ZBXM4" type="java.lang.String">
                <column name="ZBXM4" />
            </property>
            <property name="ZBXM5" type="java.lang.String">
                <column name="ZBXM5" />
            </property>
            <set name="ZB" cascade="save-update" inverse="true" lazy="false">
                <key>
                    <column name="gid" />
                </key>
                <one-to-many entity-name="entity1001.ZB" />
            </set>
            <set name="ZB1" cascade="save-update" inverse="true" lazy="false">
                <key>
                    <column name="gid" />
                </key>
                <one-to-many entity-name="entity1001.ZB1" />
            </set>
        </dynamic-component>
    </class>
    <class entity-name="entity1001.ZB" name="com.demo.Sub"
        table="entity1001_ZB">
        <composite-id>
            <key-property name="gid" type="java.lang.Integer"></key-property>
            <key-property name="billid1" type="java.lang.Integer"></key-property>
        </composite-id>
        <property name="gid" type="java.lang.String">
            <column name="gid" />
        </property>
        <property name="billid" type="java.lang.Integer">
            <column name="billid" />
        </property>
        <dynamic-component insert="true" name="dynamicProperties"
            optimistic-lock="true" unique="false" update="true">
            <property name="BH" type="java.lang.String">
                <column name="BH" />
            </property>
        </dynamic-component>
    </class>
    <class entity-name="entity1001.ZB1" name="com.demo.Sub"
        table="entity1001_ZB1">
        <composite-id>
            <key-property name="gid" type="java.lang.Integer"></key-property>
            <key-property name="billid1" type="java.lang.Integer"></key-property>
        </composite-id>
        <property name="gid" type="java.lang.String">
            <column name="gid" />
        </property>
        <property name="billid" type="java.lang.Integer">
            <column name="billid" />
        </property>
        <dynamic-component insert="true" name="dynamicProperties"
            optimistic-lock="true" unique="false" update="true">
            <property name="ZXM1" type="java.lang.String">
                <column name="ZXM1" />
            </property>
            <property name="ZXM3" type="java.lang.String">
                <column name="ZXM3" />
            </property>
            <property name="ZXM4" type="java.lang.String">
                <column name="ZXM4" />
            </property>
        </dynamic-component>
    </class>
</hibernate-mapping>

1.4 保存查询

//保存
String entityName = EntityUtil.getEntityName(po);
hibernateDao.getPojoTemplate().saveOrUpdate(entityName, po);

//查询
String entityName = EntityUtil.getEntityName(classId, typeId);
return hibernateDao.getPojoTemplate().get(entityName, key);

1.5 子表复合主键

子表模型实现 hashCode, equals方法。

@Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((billid1 == null) ? 0 : billid1.hashCode());
        result = prime * result + ((gid== null) ? 0 : gid.hashCode());
        return result;
    }

    /**
     * {@inheritDoc}
     * 
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Sub other = (Sub) obj;
        if (billid1 == null) {
            if (other.billid1 != null)
                return false;
        } else if (!billid1.equals(other.billid1))
            return false;
        if (ywid == null) {
            if (other.gid!= null)
                return false;
        } else if (!gid.equals(other.gid))
            return false;
        return true;
    }

查询如下

        Sub key = new Sub();
        key.setBillid(vo.getBillid());
        key.setGid(vo.getGid());

        Sub po = (Sub) EntityUtil.get(vo, key);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态模型 的相关文章

  • 【linux】wine 安装 apt软件安装包的依赖和dpkg包的覆盖——尝试覆盖共享/usr/share/doc/l它与软件包 libxxx:i386 中的其他实例不同,尚不能配置软件包 libx

    错误还原 xff1a 现在尚不能配置软件包 libxxx i386 3 2 1 4 xff0c 因为 xxx amd64 处于一个不同的版本 3 2 1 8 正在解包 libxdmcp6 i386 1 1 1 2 3 dpkg 处理归档 t
  • centos7.X下离线rpm包安装Mysql

    centos7 X下离线rpm包安装Mysql 一 查看操作系统版本 cat etc redhat release 二 下载离线rpm包 https dev mysql com downloads mysql 三 所需安装包信息 四 解压安
  • AAC编解码原理概述

    一引言 本文对AAC xff08 Advanced Audio Coding xff09 音频编码算法进行总结 首先简要介绍MPEG音频 xff08 包括AAC xff09 的发展历程及AAC概况 xff0c 然后结合FAAC xff08
  • vector_swap()回收内存方法

    vector swap 回收内存方法 最近写代码遇到了一段代码 xff0c 简化如下 xff1a span class token keyword typedef span vector span class token operator
  • 计算机网络考研/考博复试常见问题

    目录 第一章 计算机网络体系结构 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第一章 计算机网络体系结构 快速唤起记忆知识框架 1 计算机网络的主要功能 xff1f 1 硬件资源共享 可以在全网范围内
  • 编写python代码实现打开并登录网页、对网页进行点击、输入信息等操作

    当我们打开一个网页进行信息搜索时 xff0c 少不了要对它进行点击和输入信息等操作 xff0c 有的网页还可能需要你先登录才能开始其他操作 这篇博客就带大家来了解一下如何编写一段python代码实现打开并登录网页 对网页进行点击 输入信息等
  • Linux查看物理CPU个数、核数、逻辑CPU个数

    CPU总核数 61 物理CPU个数 每颗物理CPU的核数 总逻辑CPU数 61 物理CPU个数 每颗物理CPU的核数 超线程数 1 查看CPU信息 xff08 型号 xff09 span class token function cat s
  • Windows系统:将Typora加入右键新建快捷选项

    本文使用写 reg注册表文档并执行的方法将Typora加入右键新建快捷选项 用执行 reg的方法将Typora加入右键新建选项 步骤 xff1a 新建txt文档 xff0c 命名文档为typora 注意 xff0c 可在本机的任意位置建立
  • 如何在 win系统 桌面上加入某个软件的快捷方式

    其实很简单 xff0c Win 43 R 打开运行 xff0c 输入shell AppsFolder打开文件夹 xff0c 就像这样 回车进入应用列表 xff1a 找到你想放到桌面的那个app右键然后点击创建快捷方式然后选择是 xff0c
  • Python 文件加密

    我们通常编写的python源文件 xff08 py文件 xff09 可以由记事本等软件直接打开 xff0c 如果想要发布程序 xff0c 那么只能直接发布源文件 xff0c 但是发布源码的话 xff0c 就极易被别人轻松使用 有没有加密的方
  • Echarts显示数据被遮挡了

    设置参数 xff1a trigger 39 item 39 在echarts中自定义提示框内容 1 期望效果 以柱状图为例 xff0c 在鼠标滑过每个数据标签时 xff0c 为了更友好地显示数据内容 xff0c 需要对显示的数据内容作格式化
  • Debian 查看系统版本的6种方式

    1 lsb release命令 lsb release 命令可以查看操作系统的具体版本 xff0c 但是需要我们手动安装 安装 apt get install lsb release 使用 lsb release a 2 查看 etc is
  • 下一代 IDE 工具 JetBrains Fleet 正式公测

    这几天 xff0c JetBrains Fleet 可以说是闹的沸沸扬扬 xff0c 官方的态度很明确 xff0c 我们是下一代 IDE xff0c 使用了 IntelliJ 代码处理引擎 xff0c 并且是建立在 20 年的 IDE 开发
  • vue实现websocket断线重连

    下面有demo和注释 span class token tag span class token tag span class token punctuation lt span template span span class token
  • 斐讯K3 在openwrt上如何手动安装阿里云盘aliyun-dav

    感觉网络上很多的东西 xff0c 不那么复杂的 xff0c 是没有教程让它变复杂 斐讯K3 在openwrt上如何手动安装阿里云盘aliyun dav xff0c 这很正常的需求吧 xff0c 只有固件打包在里面的 xff0c 没有手动安装
  • 多主机IIC系统中时钟同步及仲裁

    两个主机可以同时开始在空闲总线上进行传输 xff0c 并且必须有一种方法来确定控制总线并完成数据传输 xff0c 这是通过时钟同步和仲裁完成 在单主机系统中 xff0c 不需要时钟同步和仲裁 时钟同步是通过I2C接口中SCL线的线与实现 x
  • ros-机器人URDF建模问题

    參考這篇文章 xff0c 分分钟解决问题 xff0c 感谢博主 参考链接 xff1a https blog csdn net m0 46259024 article details 105333552 这里总结一下出现的问题 问题1 ros
  • Ubuntu16.04vscode打不开的问题

    1 问题描述 我第一次在这位博主点击这里的教程下尝试去安装vscode xff0c 但是呢他是用wget的方式按装的 xff0c 后来设置也不好弄 xff0c 但是这个时候其实vs已经可以打开了 可是我把图标设置到桌面上 xff0c 直接点
  • rbx1运行出错

    xacro Traditional processing is deprecated Switch to inorder processing To check for compatibility of your document use
  • ubuntu18.04中解决无法创建文本文件问题

    ubuntu18 04无法创建文本文件问题 1 打开文件夹 xff0c 在用户主目录里找到 模板 文件夹打开并打开模板终端 2 输入 xff08 sudo gedit 文本文件 xff09 会弹出一个空白文本文件 xff0c 点击保存 3

随机推荐

  • 2.4电池电量的显示

    一 ui界面设计 打破布局 xff1a mainwindowDesgin 然后继续添加几个label用于显示电量提示信息等 导入resources图片资源文件 xff1a 首先把图片以及相关的资源文件copy到resources文件夹下 x
  • 2.5订阅图像话题并显示

    出错了 xff0c 一直找不到rviz config cmake配置文件 重新创建一个工作空间又好了 xff0c 奇怪的一批 xff0c 估计又是工作空间的问题 首先添加依赖 xff0c 包含头文件 ui界面设计 对显示图片的那个label
  • ROS Rviz组件开发方法 3.1

    首先我们先进行ui设计 xff1a 在两个主页面添加两个页 xff0c 名称改为rviz xff0c 在curentTabText里面修改 然后在电池电量下面那个rviz的页面中加入一个treewidget 给他纵向布局 xff0c 修改大
  • 3.2加载RVIZ常用的Display

    前面基本的gird图形设计好了 xff0c 接下来就是去设置gird的图层属性 xff0c 在qrviz hpp中声明一个接口函数 xff1a void Display Grid int Cell Count QColor color bo
  • 树莓派

    树莓派资料大全 xff1a 树莓派资料大全 xff1a
  • 远程连接服务器无法拷贝本地文件解决

    方法一 让远程服务器访问本地文件 1 点击开始 gt 程序 gt 附件 gt 远程桌面连接 xff08 或者Win 43 R xff0c 输入mstsc xff09 xff0c 打开 远程桌面连接 菜单 xff0c 点击 选项 按钮 xff
  • 3-linux文件系统常用命令

    1 查看目录下文件 ls l a 带上参数 a则显示隐藏文件 xff0c 隐藏文件的特点是在文件名前多出一个点 l a 都是短选项 xff0c 短选项后面只能跟一个字符 xff0c 所以可以写在一起 xff1a la 长选项例如 xff1a
  • (一)我们编写的代码如何在计算机上运行

    目录 1 计算机指令 2 代码执行过程 3 函数执行的原理 4 我们写的代码如何编译链接 xff0c 被加载到内存并执行 4 1 背景 4 2 问题 4 3 解决方案 4 4 编译 gt 链接 gt 装载 4 5 程序如何加载到内存 4 6
  • 51单片机工作于方式0的定时器模式

    51单片机的 模式0 xff08 13位定时器 计数器 xff09 第一步 xff1a 通过设置TMOD中的M1 M0位设置 xff0c 即可完成模式选择 00 为 模式0 xff08 13位定时 计数模式 xff09 01 为模式1 xf
  • Linux系统下的root用户初始密码设置及用户切换方法

    导读 在安装好Linux或Ubuntu这类开源系统后 xff0c 默认启用的帐号是我们在安装系统时创建的帐号 xff0c 有时候我们在执行一下操作时 xff0c 发现权限不够 xff0c 通常我们就会切换到 root 用户上去执行相关的操作
  • win10安装visual studio 2015 出现安装包丢失或损坏是什么原因?

    作者 xff1a xiaoma 链接 xff1a https www zhihu com question 33643147 answer 252040460 xff08 觉得有帮助的 xff0c 一定要顶上去 让更多人看到 下面图片是我从
  • nginx --增加 headers-more-nginx-module

    已经编译好的编nginx需要添加headers more nginx module模块来自定义响应头 1 需要下载headers more nginx module wget https span class hljs comment gi
  • btrfs snapshot快照与回滚

    拍快照是 btrfs subvolume snapshot source dir dest dir snapshot name 回滚方式 xff1a 将原目录更名mv source dir source dir back 利用快照目录再次快
  • 简单方便的linux定时任务管理器——supervisor

    背景 我们在linux服务器上部署模型或者一个长期运行的程序的时候 xff0c 通常使用的是nohup方法 xff0c 因为nohup真的非常简单 xff0c 只需要一行命令即可 xff0c 但是nohup不好的地方就在于无法监控 xff0
  • HTTP、HTTPS等常用的默认端口号

    最近部署一个接口访问对方域名 xff0c https开头Url 端口配成80 xff0c 犯了个低级错误 重新学习一下 端口号标识了一个主机上进行通信的不同的应用程序 1 xff0c HTTP服务器 xff0c 默认端口号为80 tcp x
  • Msg3.0.db可以删吗?一招教你释放C盘50个G空间!

    相信很多朋友经常遇到C盘爆满的时候 xff0c 网上很多方法解决的并不彻底 xff0c 而且很多时候不具有通用性 今天给大家介绍一下如何使用WinDirStat来快速释放自己的硬盘 xff01 WinDirStat 这款神器自己可以自行百度
  • dpkg介绍

    dpkg dpkg a medium level package manager for Debian With dpkg set selections you can set which packages are to be instal
  • 【常用算法】辗转相除法求最大公约数

    辗转相除法 xff0c 又称欧几里德算法 xff08 Euclidean Algorithm xff09 xff0c 是求两个数的最大公约数 xff08 greatest common divisor xff09 的一种方法 用较大的数除以
  • Python人工智能之图片识别,Python3一行代码实现图片文字识别

    自学Python3第5天 xff0c 今天突发奇想 xff0c 想用Python识别图片里的文字 没想到Python实现图片文字识别这么简单 xff0c 只需要一行代码就能搞定 作者微信 xff1a 2501902696 from PIL
  • 动态模型

    1 动态模型 1 1 说明 动态模型是指模型的属性是不固定的 xff0c 可以添加和变更 xff1b 也指不同模型 xff0c 可以增加模型 不同模型在存储上为了性能和隔离 xff0c 使用不同的表 但逻辑编写为了复用 xff0c 一般使用