zoukankan      html  css  js  c++  java
  • hibernate 联合主键

     

    xml方式处理联合主键:

     

    以有两个主键:id和name的student表为例。

    先创建个主键类:

     

    package com.bjsxt.hibernate;

    //黑色为必写项

    public class StudentPK implements java.io.Serializable{
        private int id;
        private String name;
        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;
        }
       
        @Override
        public boolean equals(Object o) {
            if(o instanceof StudentPK) {
                StudentPK pk = (StudentPK)o;
                if(this.id == pk.getId() && this.name.equals(pk.getName())) {
                    return true;
                }
            }
            return false;
        }
       
        @Override
        public int hashCode() {
            return this.name.hashCode();
        }
    }

     

    写model:

    package com.bjsxt.hibernate;

    public class Student {
       
        private StudentPK pk;
       
        private int age;
        private String sex;
        private boolean good;
        public boolean isGood() {
            return good;
        }
        public void setGood(boolean good) {
            this.good = good;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public StudentPK getPk() {
            return pk;
        }
        public void setPk(StudentPK pk) {
            this.pk = pk;
        }
    }

     

    映射关系:Student.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="com.bjsxt.hibernate.Student">
           
               
            <composite-id name="pk" class="com.bjsxt.hibernate.StudentPK">
                <key-property name="id"></key-property>
                <key-property name="name"></key-property>
            </composite-id>
           
            <property name="age" />
            <property name="sex" />
            <property name="good" type="yes_no"></property>
        </class>
       
    </hibernate-mapping>

     

     

    Annotation(注解)处理联合主键

     

     

    三种方法:

    将主键类注解为@Embeddable并将model中的属性——主键类的对象注解为@Id

    将主键类的对象充当的组件的属性注解为@EmbeddedId,仍然需要主键类。

    将类注解为@IdClass(主键类.class ),并将该实体中所有属于主键的属性都注解为@Id

  • 相关阅读:
    全国省市区县数据库脚本
    在 PHP 中养成7个面向对象的好习惯
    DIV CSS网页布局常用的方法与技巧[转]
    Div弹出提示效果(原创)
    通过数据库备份还原 TFS 到新服务器(转)
    C#多线程实现方法——Task/Task.Factary
    SEH结构异常处理使用
    Windows/Unix/Linux编译C/C++添加头文件与库的搜索路径
    windows 使用技巧
    linux重要命令
  • 原文地址:https://www.cnblogs.com/flying607/p/3475021.html
Copyright © 2011-2022 走看看