zoukankan      html  css  js  c++  java
  • hibernate之初学复合主键

    Jar包什么的就看前面几篇文章,接下来介绍复合主键知识

    首先是hibernate的配置文件hibernate,cfg.xml基本没有什么变化

    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">123456</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/webproject</property><!--
                    反正下面这段话我直接跑去hibernate.dialect包下复制文件路径的时候gg了要指定特定的方言
            --><property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
            <property name="hibernate.show_sql">true</property><!--
            如果不存在就自动创建一个,如果存在就修改
            --><property name="hibernate.hbm2ddl.auto">update</property>
            <!--
                    如果不加下面这句话,引入你自己写的配置文件,你将会很绝望
            --><mapping resource="com/shaoxin/cn/User.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

    然后是User表的配置文件用于映射User.hbm.xml这里要注意主键不再是id

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping 
        package="com.shaoxin.cn">
        <class name="User"  table="user"><!--
        复合主键
        --><composite-id name="compositionUser" >
            <key-property name="username" column="username"></key-property>
            <key-property name="address" column="address"></key-property>
        </composite-id>
       <!--
            下面的分别是实体类中的属性对应数据库中的字段
            --><property name="age" column="age"></property>
        </class>
    </hibernate-mapping>

    然后是User实体类,这里面要把符合主键单独作为一个类写出去,并作为User实体类的一个属性

    package com.shaoxin.cn;
    
    public class User {
        private CompositionUser compositionUser;
        private int age;
    
        public CompositionUser getCompositionUser() {
            return compositionUser;
        }
    
        public void setCompositionUser(CompositionUser compositionUser) {
            this.compositionUser = compositionUser;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
    }

    符合主键类要注意了一定要实现Serializable这个接口

    package com.shaoxin.cn;
    
    import java.io.Serializable;
    
    public class CompositionUser implements Serializable {
        private String username;
        private String address;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
    }

    接下类就是测试类,没什么好说的

    package com.shaoxin.cn;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    public class UserTest {
        @Test
        public void testUser() throws Exception {
            Session session = new Configuration().configure().buildSessionFactory()
                    .openSession();
            Transaction tx = session.beginTransaction();
            CompositionUser compositionUser = new CompositionUser();
            compositionUser.setAddress("江西南昌");
            compositionUser.setUsername("邵欣");
            User user = new User();
            user.setCompositionUser(compositionUser);
            user.setAge(23);
            session.save(user);
            tx.commit();
            session.close();
        }
    }
  • 相关阅读:
    《Effective Java》—— 读后总结
    自己写的数据交换工具——从Oracle到Elasticsearch
    Oozie 快速入门
    [大数据之Spark]——快速入门
    《Spark快速大数据分析》—— 第七章 在集群上运行Spark
    [大数据之Sqoop] —— Sqoop初探
    Java程序员的日常——存储过程知识普及
    Java程序员的日常—— 基于类的策略模式、List<?>与List、泛型编译警告、同比和环比
    org.postgresql.util.PSQLException:致命:抱歉,已经有太多客户了(org.postgresql.util.PSQLException: FATAL: sorry, too many clients already)
    PostgreSQL学习笔记(九) 用户、角色、权限管理
  • 原文地址:https://www.cnblogs.com/ShaoXin/p/7091455.html
Copyright © 2011-2022 走看看