当前位置: 首页 > news >正文

hibernate之复合主键作为外键的相关配置

1.首先得有一个复合主键类CompositClassTest存在

CompositClassTest.java

package home.yhs.entity;

import java.io.Serializable;

public class CompositClassTest implements Serializable{

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

    String classId;

    String className;

    public String getClassId() {
        return classId;
    }

    public void setClassId(String classId) {
        this.classId = classId;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

}

注意:该类不需要单独的配置文件

 

2.其次得的有一个包含复合主键类(CompositClassTest)的类ClassTest存在

ClassTest.java:

package home.yhs.entity;

public class ClassTest {

    CompositClassTest compositClassTest;//复合主键,用一个单独的类来表示
    
    String num;
    
    public CompositClassTest getCompositClassTest() {
        return compositClassTest;
    }

    public void setCompositClassTest(CompositClassTest compositClassTest) {
        this.compositClassTest = compositClassTest;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }
    
}

 

对应的配置文件ClassTest.hbm.xml:

<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC   
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping>  
    <class name="home.yhs.entity.ClassTest" table = "classtest"> 
           <composite-id name = "CompositClassTest" class = "home.yhs.entity.CompositClassTest">
               <key-property name="classId"></key-property>
               <key-property name="className"></key-property>//这部分就是对应复合主键类的相关配置
           </composite-id>
          <property name="num"></property>
    </class>  
</hibernate-mapping>

 

3.接下来有一个User.java类与对应的ClassTest类产生Many to one 的单向映射关系

User.java:

package home.yhs.entity;  
  
import java.util.Date;  
  
public class User {  
  
    private String id;  
    
    private String name;  
    
    private String password;  

  private ClassTest classTest;//User类想要与ClassTest类达成单向映射的关系,必须包含ClassTest类的引用 public User() { super(); } public ClassTest getClassTest() { return classTest; } public void setClassTest(ClassTest classTest) { this.classTest = classTest; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }

 

对应的配置文件User.hbm.xml:

<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC   
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping>  
    <class name="home.yhs.entity.User" table = "User"> 
        <id name="id">  
            <generator class="assigned"/> 
        </id>  
        <property name="name"/>  
        <property name="password"/>  
        <many-to-one name="classTest" class="home.yhs.entity.ClassTest" cascade="all" unique="true" lazy="false">
        <column name="classId"></column>
        <column name="className"></column>
        </many-to-one> 
    </class>  
</hibernate-mapping>

 

4.最后再来一个测试类:

package home.yhs.util;

import java.util.Date;

import org.hibernate.Hibernate;

import home.yhs.entity.ClassTest;
import home.yhs.entity.CompositClassTest;
import home.yhs.entity.User;

public class Test {

    public static void main(String[] args) {
        CompositClassTest compositClassTest = new CompositClassTest();
        compositClassTest.setClassId("3");
        compositClassTest.setClassName("yhs");
        ClassTest clasTest = new ClassTest();
        clasTest.setCompositClassTest(compositClassTest);//添加复合主键到对应的类
        clasTest.setNum("234");
//        HibernateUtils.insert(clasTest);
        User user = new User();
        user.setId("2");
        user.setName("某某某");
        user.setPassword("root");
        user.setCreateTime(new Date());
        user.setExpireTime(new Date());
        user.setClassTest(clasTest);
        HibernateUtils.insert(user); 
    /*    User user = new User();
        user.setId("4");
        User user1 = (User) HibernateUtils.getById(User.class, user.getId());
        System.out.println(user1.getClassTest().getNum());*/
    }
}

注意:在实现User与ClassTest的单映射之后,在User执行插入操作的时候,会先到ClassTest对应的数据表中查找User对应的复合外键的数据行是否存在,如果存在则不再插入,如果不存在,则会先向ClassTest表中插入数据,然后再向User表中插入数据。

转载于:https://www.cnblogs.com/studyCenter/p/6709222.html

相关文章:

  • js中match函数方法
  • 51NOD 1237 最大公约数之和 V3 [杜教筛]
  • 20169219 2016-2017-2 《移动平台开发》第七周作业
  • Verilog基础知识0(`define、parameter、localparam三者的区别及举例)
  • redis安装配置
  • U-Mail邮件中继针对性横扫邮件通关六大阻力
  • 博客、文章索引。
  • 洛谷P1508 Likecloud-吃、吃、吃 [2017年4月计划 动态规划10]
  • sublime text3及插件安装过程
  • U872-结算成本处理步骤及索引处理
  • Python 3.5 in win10 pip install Orange3
  • 记一次前端工程构建
  • Linux top、VIRT、RES、SHR、SWAP(S)、DATA Memory Parameters Detailed
  • Sping Boot + Spring Security + Mybaits + Logback +JWT验证 项目开发框架搭建
  • Makefile学习之路5——通过函数增强功能
  • Electron入门介绍
  • java中的hashCode
  • JS专题之继承
  • mockjs让前端开发独立于后端
  • Python socket服务器端、客户端传送信息
  • WebSocket使用
  • 从tcpdump抓包看TCP/IP协议
  • 今年的LC3大会没了?
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 前端存储 - localStorage
  • 小程序 setData 学问多
  • 写代码的正确姿势
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 再次简单明了总结flex布局,一看就懂...
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #QT项目实战(天气预报)
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Python) SOAP Web Service (HTTP POST)
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (接口自动化)Python3操作MySQL数据库
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原創) 物件導向與老子思想 (OO)
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET delegate 委托 、 Event 事件
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET面试题(二)
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .NET中 MVC 工厂模式浅析
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解