您的位置:首页 > 编程语言 > Java开发

Java学习之道:hibernate联合主键的创建方式

2013-07-31 17:25 363 查看
总结个hibernate联合主键的创建方式,刚看完兵爷的视频,赶紧弄下来。冬爷,赶紧膜拜知道不?我这弄下来是为了明天面试,压力大很知道不?

联合主键,讲一张表中两个属性同时作为主键。

student.java

import javax.persistence.EmbeddedId;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.IdClass;

@Entity

@IdClass(value=StudentPK.class)

public class Student {

//@EmbeddedId

//private StudentPK pk;

@Id

private int id;

@Id

private String name;

// public StudentPK getPk() {

// return pk;

// }

// public void setPk(StudentPK pk) {

// this.pk = pk;

// }

private int age;

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;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

还有另外一个类专门设立有关主键的两个变量。

studentPK.java

Java代码


package com.hibernate.finalmodel;

import java.io.Serializable;

import javax.persistence.Embeddable;

public class StudentPK implements 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;

}

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;

}

public int hashCode() {

return this.name.hashCode();

}

}

这里必须重写equals和hashcode方法。重写hashcode是要定位name属性是否一致,在内存中,hashcode相同的对象线性储存。找到相同的hashcode后,在比较equals,从而得到联合主键的比较结果。

写一个单元测试

TestBase.java

Java代码


package com.hibernate.finaltest;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.AnnotationConfiguration;

import org.junit.After;

import org.junit.AfterClass;

import org.junit.Before;

import org.junit.BeforeClass;

import org.junit.Test;

import com.hibernate.finalmodel.Student;

import com.hibernate.finalmodel.StudentPK;

public class TestBase {

private static SessionFactory sessionFactory = null;

Session session;

@BeforeClass

public static void preMethod() {

sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

// if(session == null)

// session = sessionFactory.openSession();

// else

// session = sessionFactory.getCurrentSession();

}

@AfterClass

public static void postMethod() {

sessionFactory.close();

}

@Test

public void testMethod() {

System.out.println("start create student");

session = sessionFactory.openSession();

// Student s = new Student();

// s.setAge(23);

// s.setName("samuel");

StudentPK pk = new StudentPK();

pk.setId(1);

pk.setName("Andrew");

Student s = new Student();

//s.setPk(pk);

s.setAge(7);

session.beginTransaction();

session.save(s);

session.getTransaction().commit();

session.close();

}

}

[/code

测试成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: