文档章节

hibernate联合主键

绿林小子
 绿林小子
发布于 2015/11/04 16:48
字数 440
阅读 150
收藏 5

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

一、 hibernate联合主键类的规则

      1. 实现Serializable接口

      2. 重写hashCodeequals方法

二、hibernate联合主键的实体类规则原因(与上面规则顺序对应)

     1. Hibernate要根据数据库的联合主键来判断某两行记录是否是一样的,如果一样那么就认为是同一个对象,如果不一样,那么就认为是不同的对象。这反映到程序领域中就是根据hashCode与equals方法来判断某两个对象是否能够放到诸如Set这样的集合当中;

     2. 使用get或load方法的时候需要先构建出来该实体的对象,并且将查询依据(联合主键)设置进去,get或load方法的第二个参数需要序列化。

public Object get(Class clazz,Serializable id)


三、 hibernate联合主键的使用  

PrimaryKey.java

public class PrimaryKey implements Serializable{  
    // 属性
    private String cardID;  
    private String name;  
    //get、set方法省略
    ...
    // 重写EQUAL方法
    public boolean equals(Object other) {
		if ((this == other))
			return true;
		if ((other == null))
			return false;
		if (!(other instanceof PrimaryKey))
			return false;
		PrimaryKey castOther = (PrimaryKey) other;
		return ((this.getCardID() == castOther.getCardID()) || (this.getCardID() != null && castOther.getCardID() != null && this.getCardID().equals(castOther.getCardID())))&& ((this.getName() == castOther.getName()) || (this.getName() != null && castOther.getName() != null && this.getName().equals(castOther.getName())));
   }

	 // 重写HASHCODE方法
	public int hashCode() {
		int result = 17;
		result = 37 * result + (getSpId() == null ? 0 : this.getSpId().hashCode());
		result = 37 * result + (getName() == null ? 0 : this.getName().hashCode());
		return result;
	}  
}
Student.java
public class Student  {
    // 属性
    private PrimaryKey primaryKey;  // 联合主键类  
    private int age;      
    //set、get方法省略  
}

Student.hbm.xml

<class name="bean.Student" table="student">  
    <!--PrimaryKey为自定义的主键类-->
    <composite-id name="primaryKey" class="bean.PrimaryKey">  
       <!--name及cardID为PrimaryKey类中的属性-->
       <key-property name="name" column="student_name" type="string"></key-property>  
       <key-property name="cardID" column="card_id" type="string"></key-property>  
    </composite-id>  
    <property name="age" column="student_age" type="int"></property>  
</class>
hibernate中使用
// 获取
	public Student get(Serializable id) throws Exception {
		Object obj = this.getHibernateTemplate().get(Student.class,id);
		if (obj == null) {
			return null;
		} else {
			return (Student) obj;
		}
	}










© 著作权归作者所有

绿林小子
粉丝 5
博文 131
码字总数 45566
作品 0
福州
私信 提问
Hibernate联合主键映射规则和数据查询原理

Hibernate联合主键的映射规则: 第一种:主键和属性在一个类中 1.配置文件 注:联合主键的主键配置标签用表示。

长平狐
2012/11/12
1K
0
hibernate 关于联合主键

-----------------------------映射文件---------------------------------------------- <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD......

李永china
2016/05/01
44
0
Java程序员从笨鸟到菜鸟之(六十)细谈Hibernate(十一)hibernate复合主键映射

欢迎阅读本专题其他博客: 细谈Hibernate(六)Hibernate继承关系映射 细谈Hibernate(七)Hibernate自身一对多和多对多 细谈Hibernate(八)Hibernate集合Map关系映射 细谈Hibernate(九)h...

长平狐
2012/11/12
221
1
Hibernate(三)——框架中的关系映射

在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系。而Hibernate时间实体类和数据库中的...

凡尘里的一根葱
2015/11/11
72
0
Hibernate的学习笔记(4)

通过前段时间的学习,hibernate的映射关系尤为重要,需要理解的也有挺多的。 1、一对一映射 1)主键关联。一对一默认使用的是立即加载,如果需要时用延迟加载,那么需要在one-to-one元素中将...

larch
2012/07/15
191
0

没有更多内容

加载失败,请刷新页面

加载更多

如何更改iOS应用程序的名称?

我前几天用一个愚蠢的开发代码名称开始了一个iPhone项目,现在我想改变项目的名称,因为它已经接近完成了。 但是我不知道如何使用Xcode来做这件事,尝试在info.plist文件中更改应用程序的名称...

技术盛宴
21分钟前
2
0
关于win10tensorflow的配置(CPU+GPU)

主要内容 CPU篇 GPU篇 【前期准备与注意事项】 环境:window1064位+python36(37)+CUDA9.0+cuDNN7.6+tensorflow_gpu-1.12.0 软件:anaconda+pycharm 硬件:有nvidia显卡的笔记本或台式(非A...

放只虎归个山
29分钟前
1
0
C#中的多行字符串文字

有没有一种简单的方法可以在C#中创建多行字符串文字? 这是我现在所拥有的: string query = "SELECT foo, bar"+ " FROM table"+ " WHERE id = 42"; 我知道PHP有 <<<BLOCKBLOCK; C#是......

javail
37分钟前
3
0
微信支付之小微商户扫盲!支持信用卡,免营业执照!

微信支付商户申请面向线下小微商户开放,符合条件的微信支付服务商可为小微商户发起接入申请。无需营业执照。 小微商户日收款额度为5万元~30万元 。 信用卡支付日限额为1千;月限额1万。 结算...

吴伟祥
今天
4
0
大话SDWebImage(三)-- 图片下载层

四、图片下载层 SDWebImageDownloader是处理图片下载的类 4.1 图片下载步骤 首先介绍下dispatch_barrier,GCD中的dispatch_barrier目的是在并发队列实现串行的效果,创建下载任务SDWebImageD...

aron1992
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部