问题描述:
1.当一个字段作为主键未能标识唯一一条记录,就需要两个字段作为联合主键。
2.项目设计的时候,往往要在 性能、复杂度、时间方面,做取舍,"联合主键"之类的是比较增加复杂度的东西,尤其是需求有开动。这里只是学习联合主键的使用方法,故暂不考虑这些问题。
例子说明:假设student表中有以下字段: sid、sname、sage、sbirthday等等,这里想实现把sid和sname都做为主键来标识唯一一条记录。
在模型里面的student代码如下:这里的StudentPK实际上是包含了联合主键字段的一个类。
package com.zk.model;
public class student {
private StudentPK pk;
public StudentPK getPk() {
return pk;
}
public void setPk(StudentPK pk) {
this.pk = pk;
}
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
1.实现序列号接口
在写的junit测试类中执行保存数据的时候,如果不实现Serializable接口会提示错误。序列化是java提供的一种保存对象状态的机制,可以方便的保存对象状态再读出来。以下情况一般会需要序列化:
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
2.重写equals方法
这里增加了判断条件的限制,为了保证是sid和sname作为主键保证数据的唯一性。
3.重写hashCode方法
package com.zk.model;
public class StudentPK implements java.io.Serializable { private int sid;
private String sname;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
@Override //为了保证是通过联合主键来确定唯一的一条记录。
public boolean equals (Object o)
{
if(o instanceof StudentPK)
{
StudentPK pk = (StudentPK)o;
if(this.sid==pk.getSid()&&this.sname.equals(pk.getSname()))
{
return true;
}
return false;
}
return false;
} @Override
public int hashCode(){
return this.sname.hashCode();
}
}
测试类的代码如下:
package com.zk.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.zk.model.StudentPK;
import com.zk.model.student;
public class test_001 {
public static void main(String[]args)
{
StudentPK pk = new StudentPK();
pk.setSid(5);
pk.setSname("张三");
student s = new student();
s.setPk(pk);
s.setAge(25);
Configuration cfg = new Configuration();
SessionFactory sf = cfg.configure().buildSessionFactory();//产生connection的一个集合;
Session session = sf.openSession();//数据库的connection
session.beginTransaction();
session.save(s);
session.getTransaction().commit();
session.close();
sf.close();
}
}
192

被折叠的 条评论
为什么被折叠?



