首页 > 其他分享 >Hibernate组件映射

Hibernate组件映射

时间:2024-07-01 09:01:44浏览次数:22  
标签:hibernate String 映射 country pincode Hibernate 组件 public name

在组件映射中,我们将依赖对象映射作为组件。 组件是存储为值而不是实体引用的对象。 如果从属对象没有主键,则要使用此方法。 它用于组合(HAS-A关系)的情况下,这就是为什么把它称为组件。 下面来看看看有HAS-A关系的类。

Hibernate组件映射示例

创建一个Java项目:componentmapping,项目的目录结构如下图所示 -

下面我们来看看每个文件中的代码。

文件:Address.java

package com.yiibai;

public class Address {
    private String city, country;
    private int pincode;

    public Address() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Address(String city, String country, int pincode) {
        super();
        this.city = city;
        this.country = country;
        this.pincode = pincode;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public int getPincode() {
        return pincode;
    }

    public void setPincode(int pincode) {
        this.pincode = pincode;
    }

}

Java

文件:Employee.java

package com.yiibai;

public class Employee {
    private int id;
    private String name;
    private Address address;

    public Employee(String name, Address address) {
        super();
        this.name = name;
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

}

Java

文件:MainTest.java

package com.yiibai;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class MainTest {
    public static void main(String[] args) {
        // 相对于3.x.x版本hibernate,我们在4.x.x采用如下方式获取我们的会话工厂:
        // 1. 解析我们在hibernate.cfg.xml中的配置
        // Configuration configuration = new Configuration().configure();
        // 2. 创建服务注册类,进一步注册初始化我们配置文件中的属性
        // ServiceRegistry serviceRegistry = new
        // ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
        // 3. 创建我们的数据库访问会话工厂
        // SessionFactory sessionFactory =
        // configuration.buildSessionFactory(serviceRegistry);

        // 但在5.1.0版本汇总,hibernate则采用如下新方式获取:
        // 1. 配置类型安全的准服务注册类,这是当前应用的单例对象,不作修改,所以声明为final
        // 在configure("cfg/hibernate.cfg.xml")方法中,如果不指定资源路径,默认在类路径下寻找名为hibernate.cfg.xml的文件
        final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                .configure("hibernate.cfg.xml").build();
        // 2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂
        SessionFactory sessionFactory = new MetadataSources(registry)
                .buildMetadata().buildSessionFactory();

        /**** 上面是配置准备,下面开始我们的数据库操作 ******/
        Session s = sessionFactory.openSession();// 从会话工厂获取一个session

        // creating transaction object
        Transaction t = s.beginTransaction();

        Employee e1 = new Employee("Mina Sun", new Address("Haikou", "China", 221233));
        Employee e2 = new Employee("Max Su", new Address("Haikou", "China",
                224123));

        s.save(e1);
        s.save(e2);

        t.commit();
        s.close();

        System.out.println("success...");
    }
}

Java

文件: employee.hbm.xml

<?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 name="com.yiibai.Employee" table="emp_cpmap">
        <id name="id">
            <generator class="increment"></generator>
        </id>
        <property name="name"></property>

        <component name="address" class="com.yiibai.Address">
            <property name="city"></property>
            <property name="country"></property>
            <property name="pincode"></property>
        </component>

    </class>

</hibernate-mapping>

XML

运行示例

下面我们来运行 MainTest.java ,查看输出结果 -

log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Mon Mar 27 22:09:16 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Hibernate: select max(id) from emp_cpmap
Hibernate: insert into emp_cpmap (name, city, country, pincode, id) values (?, ?, ?, ?, ?)
Hibernate: insert into emp_cpmap (name, city, country, pincode, id) values (?, ?, ?, ?, ?)
success...

Java

打开数据库表:emp_cpmap,应该能到到插入的数据了。

标签:hibernate,String,映射,country,pincode,Hibernate,组件,public,name
From: https://blog.csdn.net/unbelievevc/article/details/140091512

相关文章

  • 集合Map多对多映射(使用xml文件)
    我们可以使用set,bag,map等来映射多对多关系。在这里,我们将使用map来进行多对多映射。在这种情况下,将创建三个表。多对多映射示例我们需要创建以下文件来映射map元素。首先创建一个项目:ternaryobject,它们分别如下-Question.javaUser.javaquestion.hbm.xmluser.hbm.xmlhibern......
  • linux 内存映射 与 内存共享
     一,内存映射对于磁盘文件和进程:将一个文件或其它对象映射到进程地址空间,实现文件在磁盘的存储地址和进程地址空间中一段虚拟地址的映射关系。有了这样的映射,进程利用指针直接读写虚拟地址就可以完成对文件的读写操作。这样可以避免进行read/write函数操作。文件的内存映射示......
  • 配置Spring Boot中的jpa.hibernate.ddl-auto属性
    1、create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。2、create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。3、upda......
  • ubuntu gitlab+frp 映射 版本管理平台搭建
    环境准备站点服务器:ubuntuserver22LST,RAM4G+(不然很可能502)个人PC:Vscode,git,xshell远程工具站点服务器云服务器,实体机子均可。再次动用家里的NAS-unraid开了一台ubuntu虚拟机,虚拟机用任意linux发行最新版本均可。搭建开始上一篇文章分享了hexo博客站点的搭......
  • 呼吁 《上海市卫生健康信息技术应用创新白皮书》改正 C# 被认定为A 组件 的 错误认知
    近日,《上海市卫生健康“信息技术应用创新”白皮书》(以下简称《白皮书》)正式发布,介绍了“医疗信创核心应用适配方法、公立医院信息系统及全民健康信息平台信创设计思路”,其中发现了一个错误的认知,C#/.NET被认定为A组件,具体详见下图:C#/.NET平台需要被区分为两个阶段:.NETCor......
  • 深度解析RocketMq源码-高可用存储组件(一) raft协议详解
    1.绪论前面的文章已经分析过,以前rocketmq通过主从复制的思想实现系统的高可用,即在搭建集群的时候会手动的设置一个主节点和从节点,在写入数据的时候,会先写入到主broker,然后再同步到从节点中。但是这样会有一个问题,就是主节点宕机过后,需要手动的修改从节点成为新的主节点。在roc......
  • 计网:端口映射
    计网:端口映射最近做学校的计网实验弄了好久才给弄完,感觉这个实验有点麻烦,就写了这个博客分享下(可能还有错,欢迎指出)一.题目和要求一、任务描述本项目之目的是在学习了解OSI/RM中网络层和传输层的基础理论基础上,利用华为设备的模拟环境eNSP,利用端口映射技术实现仅配置私......
  • Mybatis-Plus分页插件,嵌套查询和嵌套结果映射
    Mybatis-Plus分页插件注意事项使用Mybatis-Plus的分页插件进行分页查询时,如果结果需要使用<collection>进行映射,只能使用嵌套查询(NestedSelectforCollection),而不能使用嵌套结果映射(NestedResultsforCollection)。嵌套查询和嵌套结果映射是Collection映射的两种方式,下面通过......
  • Vue 组件打包记录
    一、打包脚本constpath=require('path')constfs=require('fs')const{build,defineConfig}=require('vite')constvue=require('@vitejs/plugin-vue')constdts=require('vite-plugin-dts')constDefineOp......
  • 03_组件、事件、插槽、发布订阅
    文档:组件基础|Vue.js(vuejs.org)什么是组件:vue组件可以将一个复杂的应用程序(或者是页面)拆分成多个小的模块,每个模块可以独立的进行开发和测试。在Vue当中组件是通过虚拟DOM来实现的,可以将复杂的页面拆分多个小的DOM节点,每个节点对应一个组件,然后这些组件组合成一个完整的页......