联合主键hibernate配置
2013-04-29 20:28
337 查看
复合(联合)主键映射
通常将复合主键相关的属性,单独放到一个类中
* 此类必须实现序列化接口 implements java.io.Serializable
* 覆写hashcode和equals方法
类:
import java.io.Serializable;
public class NamePK implementsSerializable{ //主键类
private static final long serialVersionUID =8313037022835155821L;
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName =firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName =lastName;
}
//重写,交给eclipse自己来写,source/generator hashCode()and equals()
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result +((firstName == null) ? 0 : firstName.hashCode());
result = PRIME * result +((lastName == null) ? 0 : lastName.hashCode());
return result;
}
//重写,交给eclipse自己来写
public boolean equals(Object obj) {
if (this == obj)
returntrue;
if (obj == null)
returnfalse;
if (getClass() !=obj.getClass())
returnfalse;
final NamePK other = (NamePK)obj;
if (firstName == null) {
if(other.firstName != null)
return false;
} else if(!firstName.equals(other.firstName))
returnfalse;
if (lastName == null) {
if(other.lastName != null)
return false;
} else if(!lastName.equals(other.lastName))
returnfalse;
return true;
}
}
public class UserInfo {
private NamePK namePk;
private String sex;
private int age;
}
hbm.xml
UserInfo.hbm.xml
<?xml version="1.0"encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mappingpackage="com.zd.model">
<class name="UserInfo" table="user_info">
<composite-idname="namePk">
<key-property name="firstName" column="first_name"length="12"/>
<key-property name="lastName" column="last_name"length="12"/>
</composite-id>
<property name="sex"length="12"/>
<property name="age" />
</class>
</hibernate-mapping>
测试用例:
public void testCompositeId(){
Session session = null;
Transaction ta = null;
try{
session =HibernateUtil.getSession();
ta =session.beginTransaction();
NamePK namePk = newNamePK();
namePk.setFirstName("Zhang");
namePk.setLastName("san");
UserInfo ui = new UserInfo();
ui.setNamePk(namePk);
ui.setSex("M");
ui.setAge(12);
session.save(ui);
ta.commit();
}catch(Exception e){
e.printStackTrace();
if(ta !=null){
ta.rollback();
}
}finally{
//关闭session,user变为detached离线对象
HibernateUtil.closeSession(session);
}
}
public void testgetId(){
Session session = null;
Transaction ta = null;
try{
session =HibernateUtil.getSession();
ta =session.beginTransaction();
NamePK namePk = new NamePK();
namePk.setFirstName("Zhang");
namePk.setLastName("san");
UserInfo ui = (UserInfo)session.get(UserInfo.class, namePk); //get orload均是要序列化的类,所以要把主键implementsSerializable
System.out.println(ui.getAge());
System.out.println(ui.getSex());
ta.commit();
}catch(Exception e){
e.printStackTrace();
if(ta !=null){
ta.rollback();
}
}finally{
//关闭session,user变为detached离线对象
HibernateUtil.closeSession(session);
}
}
原文地址:http://blog.sina.com.cn/s/blog_7ea6850b0100wpsi.html#bsh-73-218438078
通常将复合主键相关的属性,单独放到一个类中
* 此类必须实现序列化接口 implements java.io.Serializable
* 覆写hashcode和equals方法
类:
import java.io.Serializable;
public class NamePK implementsSerializable{ //主键类
private static final long serialVersionUID =8313037022835155821L;
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName =firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName =lastName;
}
//重写,交给eclipse自己来写,source/generator hashCode()and equals()
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result +((firstName == null) ? 0 : firstName.hashCode());
result = PRIME * result +((lastName == null) ? 0 : lastName.hashCode());
return result;
}
//重写,交给eclipse自己来写
public boolean equals(Object obj) {
if (this == obj)
returntrue;
if (obj == null)
returnfalse;
if (getClass() !=obj.getClass())
returnfalse;
final NamePK other = (NamePK)obj;
if (firstName == null) {
if(other.firstName != null)
return false;
} else if(!firstName.equals(other.firstName))
returnfalse;
if (lastName == null) {
if(other.lastName != null)
return false;
} else if(!lastName.equals(other.lastName))
returnfalse;
return true;
}
}
public class UserInfo {
private NamePK namePk;
private String sex;
private int age;
}
hbm.xml
UserInfo.hbm.xml
<?xml version="1.0"encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mappingpackage="com.zd.model">
<class name="UserInfo" table="user_info">
<composite-idname="namePk">
<key-property name="firstName" column="first_name"length="12"/>
<key-property name="lastName" column="last_name"length="12"/>
</composite-id>
<property name="sex"length="12"/>
<property name="age" />
</class>
</hibernate-mapping>
测试用例:
public void testCompositeId(){
Session session = null;
Transaction ta = null;
try{
session =HibernateUtil.getSession();
ta =session.beginTransaction();
NamePK namePk = newNamePK();
namePk.setFirstName("Zhang");
namePk.setLastName("san");
UserInfo ui = new UserInfo();
ui.setNamePk(namePk);
ui.setSex("M");
ui.setAge(12);
session.save(ui);
ta.commit();
}catch(Exception e){
e.printStackTrace();
if(ta !=null){
ta.rollback();
}
}finally{
//关闭session,user变为detached离线对象
HibernateUtil.closeSession(session);
}
}
public void testgetId(){
Session session = null;
Transaction ta = null;
try{
session =HibernateUtil.getSession();
ta =session.beginTransaction();
NamePK namePk = new NamePK();
namePk.setFirstName("Zhang");
namePk.setLastName("san");
UserInfo ui = (UserInfo)session.get(UserInfo.class, namePk); //get orload均是要序列化的类,所以要把主键implementsSerializable
System.out.println(ui.getAge());
System.out.println(ui.getSex());
ta.commit();
}catch(Exception e){
e.printStackTrace();
if(ta !=null){
ta.rollback();
}
}finally{
//关闭session,user变为detached离线对象
HibernateUtil.closeSession(session);
}
}
原文地址:http://blog.sina.com.cn/s/blog_7ea6850b0100wpsi.html#bsh-73-218438078
相关文章推荐
- Hibernate基于XML的----联合主键配置
- 使用Hibernate配置联合主键的两种方式
- hibernate如何配置联合主键
- hibernate 联合主键 注释配置
- hibernate 注解 ,视图无主键,怎么配置联合主键
- Hibernate 联合主键的配置方法实例
- 【hibernate框架】如何配置联合主键-XML与Annotation样例剖析
- Hibernate联合主键配置
- hibernate联合主键配置
- hibernate联合主键注解配置
- Hibernate xml配置方法之联合主键
- hibernate 联合主键生成机制(组合主键XML配置方式)
- Hibernate中联合主键的配置
- Hibernate联合主键在实体类中的配置
- hibernate中怎样配置两个联合属性为唯一约束(非联合主键)
- hibernate配置联合主键
- Hibernate联合主键怎样在xml中配置
- Hibernate 联合主键的xml配置
- hibernate使用配置文件创建联合主键往MySQL数据库插入数据
- hibernate 联合主键生成机制(组合主键XML配置方式)