首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从连接表中为附加属性创建多对多的Hibernate映射?

名词解释

  • 连接表(Connection Table)
  • Hibernate 映射(Hibernate Mapping)
  • 附加属性(Additional Properties)
  • 多对多映射(Many-to-Many Mapping)

问题解答

要使用 Hibernate 为附加属性创建多对多的映射,首先需要了解实体类、集合类、映射文件的作用。在 Hibernate 中,可以通过以下步骤为附加属性创建多对多的映射:

  1. 定义实体类:实体类需要映射到数据库表,包含属性和集合。
  2. 定义集合类:对于实体类中的属性,需要定义对应的集合类,用于存储多对多的关联数据。
  3. 定义附加属性:在实体类中,可以定义附加属性,它们将用作关联表的外键。
  4. 定义映射文件:使用 XML 或 Java 配置文件定义映射,包括实体类、集合类和附加属性。

下面是一个 XML 映射文件的示例:

代码语言:xml
复制
<hibernate-mapping>
    <class name="com.example.entity.MainEntity" table="main_entity">
        <id name="id" column="id">
            <generator class="assigned"/>
        </id>
        <list name="custom_properties" table="custom_properties" lazy="true">
            <key column="main_entity_id"/>
            <list-index column="index"/>
            <one-to-many class="com.example.entity.CustomProperty"/>
        </list>
    </class>
    <class name="com.example.entity.CustomProperty" table="custom_properties">
        <id name="id" column="id">
            <generator class="assigned"/>
        </id>
        <property name="name" column="name"/>
        <property name="value" column="value"/>
    </class>
</hibernate-mapping>

这个示例中,MainEntity 实体类包含了 idcustom_properties 集合,其中 custom_properties 集合类型为 ListCustomProperty 实体类包含了 idnamevalue 属性。映射文件定义了两个实体类和它们的附加属性,以及它们之间的多对多关系。

在 Java 代码中,需要使用 Configuration 对象创建一个 SessionFactory,然后使用 Session 对象执行持久化操作。示例代码如下:

代码语言:java
复制
import org.hibernate.cfg.Configuration;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

public class HibernateUtil {
    private static SessionFactory sessionFactory;
    static {
        Configuration configuration = new Configuration();
        configuration.addAnnotatedClass(com.example.entity.MainEntity.class);
        configuration.addAnnotatedClass(com.example.entity.CustomProperty.class);
        configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
        configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC");
        configuration.setProperty("hibernate.connection.username", "your_username");
        configuration.setProperty("hibernate.connection.password", "your_password");
        sessionFactory = configuration.buildSessionFactory();
    }
    public static Session getSession() {
        return sessionFactory.openSession();
    }
}

在这个代码示例中,首先创建了一个 Configuration 对象,添加了两个实体类,设置了数据库连接参数和用户名密码。然后使用 buildSessionFactory() 方法创建了一个 SessionFactory 对象。接下来,可以使用 Session 对象执行持久化操作,例如保存、更新、删除等操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

hibernate之关于使用连接实现一关联映射

大家好,又见面了,我是全栈君 【Hibernate】之关于使用连接实现一关联映射 在我们项目使用採用中间最多一般就是一,或者是,当然一一使用中间也是能够,可是这样几率通常少之又少...所以这里重点介绍一和一採用中间进行关联映射! 依旧採用Group和Person来描写叙述这个逻辑!...private String name; private Integer age; private Group group; @ManyToOne //以下是配置中间核心.../hibernate-mapping-3.0.dtd"> 写这篇文章,我特意查询了一下网上文章,发现大家都是採用XML配置,所以我这里也写了Annotations配置,由于JPAAnnotations使用起来远比XML要方便!

61720
  • 系统学习javaweb-10-Hibernate配置与api操作

    //(测试) 会自动加载映射文件:User.hbm.xml .buildSessionFactory(); 4 Hibernate映射映射(one2many) 映射...、每个类映射一张、每个子类映射一张) 4.1 集合映射 (collection)用户与收货地址,一个用户对应多个地址 4.2 一与一映射 在一多与关联关系,保存数据最好通过多一方来维护关系...配置一多与一:“双向关联” 只配置一:“单项一” 只配置一:“单项一” (配置了哪一方,哪一方才有维护关联关系权限) 【Inverse控制反转属性】 Inverse...级联保存、更新、删除 4.3 映射 维护关联关系 设置inverse属性,在多种维护关联关系影响 1....基于外键 mapping.one2one 映射添加unique=”true”属性 2.

    94520

    持久层框架是什么让你选择 MyBatis?

    在使用 Hibernate 时候,Java 开发可以使用映射文件或是注解定义 Java 语言中类与数据库之间各种映射关系,这里使用到映射文件后缀“.hbm.xml”。...下面我们就来结合示例介绍“一”关联关系。例如,一个顾客(Customer)可以创建多个订单(Order),而一个订单(Order)只属于一个顾客(Customer),两者之间存在一关系。...(t_customer)主键 id,从而维护这种一关系,如下图所示:图片关系模型和对象模型多在 Hibernate ,可以通过如下 Customer.hbm.xml 配置文件将这两种关系进行映射...-- Order类customer属性与t_ordercustomer_id之间映射, 同时也指定Order与Customer之间关系 --> <...,当然,也能够实现一一、一多关系映射以及相应双向关系映射

    47230

    Hibernate实体关系映射

    前言: 上一篇文章我们学习了Hibernate框架搭建,并且完成了单CRUD操作,今天我们来学习Hibernate多表关联。 主要来说最常见两种关系:一多关系,多关系。...这种关系在数据库如何体现呢? 数据中一一方是主表(Customer),一方是(Orders),通过主外键关联关系来维护这种关系。 cid外键,该外键被主表主键id所约束。...在面向对象思想如何体现这一关系呢? 在面向对象场景它们关系应该是Orders拥有一个Customer对象属性,Customer拥有一个Orders集合属性。...数据库是通过两个一多关系来维护这种关系,即Student和Classes都是主表,额外增加一张中间作为(Student_Classes),两张主表与中间之间都是一关系。 ?...完成一多关系映射,重点是要理解两点:1.数据如何维护;2.Java代码如何维护。

    1K20

    一篇 JPA 总结

    表示该属性并非一个到数据库字段映射,ORM 框架将忽略该属性 如果一个属性并非数据库字段映射,就务必将其标识 @Transient,否则ORM 框架默认为其注解 @Basic,例如工具方法不需要映射...关联关系映射(使用 IDEA 可以使用实体生成,也可以使用对应逆向生成实体类) 单向一(orders - customer) 结构(oreders 中有 customer 外键映射...映射方法测试 添加数据 /** * n-1 将数据插入,建议先插入一一端 */ @Test public void testMany2OnePersistence() { CustomerEntity...单向一(company - employee) 结构 ? ? 实体映射 ? ? 关联关系维护 ?...双向映射 配置一览图(实体生成数据),核心配置如下图所示,对于添加数据获取数据代码不再展示 ?

    5.6K20

    什么是JPA?Java Persistence API简介

    使用JPA时,可以创建数据存储区到应用程序数据模型对象映射。您可以定义对象和数据库之间映射,而不是定义对象保存和检索方式,然后调用JPA来保存它们。...虽然JDBC允许手动配置附带控件,但与JPA相比,它很麻烦。要修改数据库,首先需要创建一个SQL查询,该查询Java对象映射到关系数据库。然后,只要对象签名发生更改,就必须修改SQL。...通常,JPA足够灵活,可以适应您可能需要任何持久性映射。 CRUD操作 将类映射到数据库并建立其主键后,即可拥有在数据库创建,检索,删除和更新该类所需一切。...在和对象中都有四种实体关系: 一到 许多到一 许多一 一比一 每种类型关系描述了实体与其他实体关系。...您可以使用注释来自定义提取策略,但JPA默认配置通常可以直接使用,无需更改: 一:lazy 一:eager :lazy 一一:eager JPA安装和设置 最后,我们将简要介绍如何为Java

    10.2K30

    Hibernate之关联关系映射(一映射映射)

    ~~~ 1:Hibernate关联映射,存在一映射映射:   1.1:一映射,举例说明:      学生和老师:        一个老师可以教多个学生 【一映射】...: Dept映射关键点: 1:指定映射集合属性:"emps" 2:集合属性对应集合:"20171021_employee" 3:集合外键字段"20171021_employee.deptId"...【推荐,在一关联关系,保存数据最好是通过多一来维护关系,这样可以减少update语句生成,从而提高hibernate利用效率】                emp1.setDept...-- 17 映射: 18 1:映射集合属性:deve 19 2:集合属性,对应中间:relation...-- 16 映射:员工方 17 1:映射集合属性:project 18 2:集合属性,对应中间:relation

    4.7K90

    hibernate笔记加强版「建议收藏」

    映射文件里须要映射关系: 数据库 java字段名 类属性字段类型 类属性类型 关系(一一,一,多等) java面向对象关系 那么通过此*.hbm.xml...1. java类和数据库须要映射关系: 数据库 java字段名 类属性字段类型 类属性类型 关系(一一,一,多等) java面向对象关系 那么通过此...– may-to-one表示描写叙述 属性 name:学生引用班级属性名 class:表示被引用类(班级)完整名称 column:描写叙述学生外键字段 cascade...再创建与还有一个对象关系 多关系用MyEclipse通过创建java类(反向project),自己主动生成java类不是关系,而是一个 一和一个 一 java类组合起来。...)外键 column标签:当前Course课程在第三张(关系student_course)字段名称 属性:name:名称 many-to-many:描写叙述关系 属性:class

    1K20

    springboot实战之ORM整合(JPA篇)

    jpa一些比较核心配置属性介绍 jpa.hibernate.ddl-auto参数作用主要用于:自动创建|更新|验证数据库结构。...如果不是此方面的需求建议取值设为none 可选参数 create 启动时删数据库,然后创建,退出时不删除数据 create-drop 启动时删数据库,然后创建,退出时删除数据,如果不存在报错...@GeneratedValue 指定如何标识属性可以被初始化,例如自动、手动、或序列表获得值 @Column 指定持久属性属性。...这是用在一和一多关联。 @ManyToMany 定义了连接之间关系。 @ManyToOne 定义了连接之间关系。...@OneToMany 定义了连接之间存在一个一关系。 @OneToOne 定义了连接之间有一个一关系。

    5.9K20

    hibernate官方新手教程 (转载)

    Hibernate如何数据库(table)EVENTS里持久化和 载入Event类对象,每一个实例相应数据库里面的一行。...这是留给你一个设计选项,可是从这个讨论我们能够非常清楚了解什么是关联阶数(multiplicity):在这个关联两端都是“”。 我们叫这个(many-to-many)关联。...当然,数据库定义没有改变,我们仍然须要(many-to-many)阶数(multiplicity)。...使双向关联工作 首先,请牢记在心,Hibernate并不影响通常Java语义。 在单向关联,我们是如何在一个Person和一个Event之间创建联系?...在一个一(one-to-many)关联 它必须是代表(many)那端。而在(many-to-many)关联,你能够随意选取一端,两端之间并没有区别。 2.4.

    1K20

    Hibernate框架学习之注解配置关系映射

    这就是一个典型单向关联关系,所谓一其实就是指,主表一条记录唯一对应于一条记录。但具体到我们实体类又该如何来写呢?...对比着各个字段,再次体会下上述注解属性各个值意义。 ? 二、单向关联关系映射 依然,在详细学习之前,先看看什么样两张构成关系。 ?...对比着各个字段,再次体会下上述注解属性各个值意义。 ? 三、单向关联关系映射 单向和单向一是完全不同两种间关系。...,hibernate首先会为我们插入四条userinfo记录到userinfo(其中外键字段空),然后插入一条记录到usersex,在这之后,hibernate将根据set集合元素依次执行这么一条...七、双向关联关系映射 双向多关系关联映射依然需要通过第三张辅助来进行连接

    2.2K90

    Hibernate关联映射

    (*.java):它是描述数据库结构,字段在类中被描述成属性,将来就可以实现把记录映射成为该类对象了。...映射文件(*.hbm.xml):它是指定数据库映射类之间关系,包括映射类和数据库对应关系、表字段和类属性对应关系。...>标签property-ref属性关系字段名称 双向一多关联映射(非常重要): 采用双向一多关联映射目的主要是为了解决单向一多关联缺陷。..."/> 了解inverse属性: inverse属性可以用在一双向关联上,inverse属性默认为false,false表示本端可以维护关系,如果inversetrue,则本端不能维护关系...双向多关联映射: 双向目的就是为了两端都能将对方加载上来,和单向区别就是双向需要在两端都加入标签映射,需要注意是: 生成中间名称必须一样 生成中间字段必须一样 Role(角色

    1.4K60

    面渣逆袭:二十二图、八千字、二十问,彻底搞定MyBatis!

    1、数据连接创建、释放频繁造成系统资源浪费从而影响系统性能 解决:在mybatis-config.xml配置数据链接池,使用连接池统一管理数据库连接。...不同点 映射关系 MyBatis 是一个半自动映射框架,配置Java对象与sql语句执行结果对应关系,多表关联关系配置简单 Hibernate 是一个全映射框架,配置Java对象与数据库对应关系...SqlSessionFactory SqlSessionFactory 是用来创建SqlSession,相当于一个数据库连接池,每次创建SqlSessionFactory都会使用数据库资源,多次创建和销毁是资源浪费...Mapper 映射器是一些绑定映射语句接口。映射器接口实例是 SqlSession 获得,它生命周期在sqlsession事务方法之内,一般会控制在方法级。...当然可以,不止支持一一、一关联查询,还支持关联查询。 ​ 那么一、怎么实现呢?

    85030

    初识Hibernate之关联映射(一)

    该标签下key-property标签则是用来指定主键成员对应于数据具体字段。我们运行程序,看看Hibernate我们创建是否有一个组合主键: ?...下面我们看看如何通过实体类配置达到构建这种数据关联。...也就是当Hibernate根据映射配置文件创建数据时候,发现属性grade指向是一个实体类Grade,于是把Grade主键关联到grade字段上。...也就是说,当Hibernate加载到这里时候,两张表单独创建完成之后,我要回到这里来,这里有一个一外键需要更新,该外键载体在Student,外键名称是grade_id,于是它就会去更新Student...Hibernate日志输出,我们可以很显然看出来,首先Hibernate向数据库发送第一条select语句查询id1grade记录,然后默默又一次发送select语句,不过这次是Student

    1.3K80

    Hibernate框架学习之三

    在数据库实体表之间关系映射是采用外键来描述,具体如下。 1.1 三种关系 ●  一原则:再多一方创建外键指向一一方主键: ?...●  原则:创建一个中间,中间至少两个字段作为外键分别指向双方主键 ?...●  一一 建原则(两种):①  唯一外键对应:假设一任意一方,在一方创建外键指向一一方主键,然后将外键设置唯一。            ...图可以看出,通过一关系就是在本类定义对方类型对象,如A定义B类类型 属性b,B类定义A类类型属性a:一关系,图中描述是一个A对应多个B类类型 情况,需要在A类以Set集合方式引入...此时就不会再产生之前问题。 四、Hibernate多关联关系映射 4.1 创建 数据模型如下: ?

    1.8K110

    Hibernate框架学习之四(JPA操作)

    给实体类添加适当注释可以在程序运行时告诉Hibernate如何将一个实体类保存到数据库以及如何将数据以对象形式数据库读取出来。   ...其中mappedBy是映射来自,相当于inverse,即主表不在关心信息,让联系人去维护 /** * 更新操作 * 创建一个联系人 * 查询id*客户 *...5.1 实体类注解编写   在角色实体对象,如果配置了中间名和在中间列明,则在另外一方只需要配置@ManyToMany(mappedBy="users"),如下图: ?...在映射文件通过 cascade属性设置来控制是否关联对象采用级联操作,级联操作对各种关联关系都是有效。   ...在JPA多关联关系只需设置一方级联保存属性即可,本文中以用户例,实现如下: ?

    6.7K70

    『互联网架构』软件架构-mybatis体系结构(16)

    写sql语句本身就是很繁琐事情,ORM出现对象关系映射,数据库里面的二维和java里面的bean,做一配置。根本就不需要写sql语句了,后来开始普及hibernate。...hibernate hibernate 是一个完完整整ORM框架,包含基本查询,插入,修改,删除。通过java api方式进行调用,还包括二级缓存这种附加,天生支持sql防注入。 ?...,一一,,很容易绕晕,还有HQL语句,这些语句都是hibernate自己生成,这样DBA是非常郁闷性能研究把握比较大,这样会感觉它比较重了。...pooled: 连接池模式,所有连接连接池当中获取,由连接池来来进行连接建立与回收关于等操作,除支持unpooled属性外还支持属性如下: • poolMaximumActiveConnections...• delete – 映射删除语句 • resultMap 用来描述如何数据库结果集中来加载对象。 • cache – 给定命名空间缓存配置。

    1.7K21

    hibernate系列之四

    原则:在一方创建外键指向一一方主键; 原则:创建一个中间,中间至少有两个字段作为外键分别指向双方主键; 一一建原则:唯一外键对应:假设一任意一方...,在一方创建外键指向一一方主键,将外键设置唯一       主键对应:一方主键作为另一方主键; 在hibernate采用java对象关系描述数据之间关系: ?...一映射关系实现案例: 客户实体类:在hibernate系列一已经实现点击连接查看:https://www.cnblogs.com/wang-xuan/p/9195795.html 同时在客户实体类添加属性...-- many-to-one:代表一: name属性:在实体类属性:一一方对象名称; class属性:一一方全路径 column:外键,在一一方配置外键...在映射文件通过cascade属性设置来控制是否关联对象采用级联操作,级联操作对各种关联关系都是有效; 级联具有方向性:在保存一一方级联一方和在一方可以级联一一方; 在映射文件配置

    34830
    领券