由于项目中,要用的联合主键,故使用了一下,记录一下学习的心得:
1.
(1)首先定义一个,PK类,如FriendPK类,这个类必须实现了serializable序列化接口
(2)必须有一个无参的构造函数 如: public FriendPK() {
}
(3)必须重写hashCode和equals方法.
下面给出我的PK类的详细写法:
package com.hna.sns.entities.member;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
/**
* <pre>
* 说明:联合主键定义类.
* </pre>
*
* @author 徐浩 2011-3-30
*/
@Embeddable
public class FriendPK implements Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 7988302031950919652L;
// 用户ID
private long mlUId;
// 用户好友ID
private long mnFuid;
/**
* Instantiates a new friend pk.
*
* @author 徐浩 2011-3-30
*/
public FriendPK() {
}
/**
* <pre>
* Gets the UId.
* </pre>
*
* @return the UId
* @author 徐浩 2011-3-30
*/
@Column(name = "uid", length = 8, nullable = false)
public long getMlUId() {
return mlUId;
}
/**
* <pre>
* Sets the mlUId.
* </pre>
*
* @param plUId
* the new UId
* @author 徐浩 2011-3-30
*/
public void setMlUId(long plUId) {
this.mlUId = plUId;
}
/**
* <pre>
* Gets the Fuid.
* </pre>
*
* @return the Fuid
* @author 徐浩 2011-3-30
*/
@Column(name = "fuid", length = 8, nullable = false)
public long getMnFuid() {
return mnFuid;
}
/**
* <pre>
* Sets the mnFuid.
* </pre>
*
* @param pnFuid
* the new Fuid
* @author 徐浩 2011-3-30
*/
public void setMnFuid(long pnFuid) {
this.mnFuid = pnFuid;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return (int) (mlUId + mnFuid);
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object pobj) {
if (pobj == this)
return true;
if (!(pobj instanceof FriendPK))
return false;
FriendPK pk = (FriendPK) pobj;
return pk.mlUId == mlUId && pk.mnFuid == mnFuid;
}
}
(3) 定义一个实体类,如Friend
package com.hna.sns.entities.member;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.hna.framework.entities.base.BaseEntity;
import com.hna.sns.dto.member.FriendDTO;
/**
* <pre>
* The Class Friend.
* </pre>
*
* @author 徐浩 2011-3-30
*/
@Entity
@Table(name = "uchome_friend")
public class Friend extends BaseEntity<Friend, FriendDTO> {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
// id
private FriendPK mobjid;
// 用户好友名
private String mstrfusername;
// 用户好友关系状态:'0'添加好友没有等待通过,'1'双方已经是好友
private int mnstatus;
// 好友所在的好友组ID
private int mnGid;
// 好友描述
private String mstrnote;
// 好友之间的活动关系数
private long mlNum;
// 加好友的时间戳
private int mnDateline;
/**
* Instantiates a new friend.
*
* @author 徐浩 2011-3-30
*/
public Friend() {
}
/**
* Instantiates a new friend.
*
* @param plUId the pl u id
* @param plFuid the pl fuid
* @author 徐浩 2011-3-30
*/
public Friend(long plUId, long plFuid) {
FriendPK id = new FriendPK();
id.setMlUId(plUId);
id.setMnFuid(plFuid);
this.mobjid = id;
}
/**
* <pre>
* Gets the mstrfusername.
* </pre>
*
* @return the mstrfusername
* @author 徐浩 2011-3-30
*/
@Column(name = "fusername")
public String getMstrfusername() {
return mstrfusername;
}
/**
* <pre>
* Sets the pstrfusername.
* </pre>
*
* @param pstrfusername the new fusername
* @author 徐浩 2011-3-30
*/
public void setMstrfusername(String pstrfusername) {
this.mstrfusername = pstrfusername;
}
/**
* <pre>
* Gets the mnGid.
* </pre>
*
* @return the mnGid
* @author 徐浩 2011-3-30
*/
@Column(name = "gid")
public int getMnGid() {
return mnGid;
}
/**
* <pre>
* Sets the mnGid.
* </pre>
*
* @param pnGid the new Gid
* @author 徐浩 2011-3-30
*/
public void setMnGid(int pnGid) {
this.mnGid = pnGid;
}
/**
* <pre>
* Gets the mstrnote.
* </pre>
*
* @return the mstrnote
* @author 徐浩 2011-3-30
*/
@Column(name = "note")
public String getMstrnote() {
return mstrnote;
}
/**
* <pre>
* Sets the mstrnote.
* </pre>
*
* @param pstrnote the new note
* @author 徐浩 2011-3-30
*/
public void setMstrnote(String pstrnote) {
this.mstrnote = pstrnote;
}
/**
* <pre>
* Gets the mlNum.
* </pre>
*
* @return the mlNum
* @author 徐浩 2011-3-30
*/
@Column(name = "num", length = 8)
public long getMlNum() {
return mlNum;
}
/**
* <pre>
* Sets the mlNum.
* </pre>
*
* @param plNum the new Num
* @author 徐浩 2011-3-30
*/
public void setMlNum(long plNum) {
this.mlNum = plNum;
}
/**
* <pre>
* Gets the id.
* </pre>
*
* @return the friend pk
* @author 徐浩 2011-3-30
*/
@EmbeddedId
public FriendPK getId() {
return mobjid;
}
/**
* <pre>
* Sets the id.
* </pre>
* @param pid the new id
* @author 徐浩 2011-3-30
*/
public void setId(FriendPK pid) {
this.mobjid = pid;
}
/**
* <pre>
* Gets the mlNum.
* </pre>
*
* @return the mlNum
* @author 徐浩 2011-3-30
*/
@Column(name = "dateline")
public int getMnDateline() {
return mnDateline;
}
/**
* <pre>
* Sets the mnDateline.
* </pre>
*
* @param pnDateline the new Dateline
* @author 徐浩 2011-3-30
*/
public void setMnDateline(int pnDateline) {
this.mnDateline = pnDateline;
}
/**
* <pre>
* Gets the mnstatus.
* </pre>
*
* @return the mnstatus
* @author 徐浩 2011-3-30
*/
@Column(name = "status")
public int getMnstatus() {
return mnstatus;
}
/**
* <pre>
* Sets the mnstatus.
* </pre>
*
* @param pnstatus the new status
* @author 徐浩 2011-3-30
*/
public void setMnstatus(int pnstatus) {
this.mnstatus = pnstatus;
}
}
这样就可以了,呵呵!!
分享到:
相关推荐
- 在使用联合主键时,确保所有参与联合的字段都是不可更改的,以保持主键的唯一性。 - 需要注意事务管理,确保在进行插入、更新或删除操作时正确开启和提交事务。 - 查询操作中,如果只根据联合主键的部分字段进行...
当单个字段不足以唯一确定一条记录时,可以使用联合主键。 #### 使用JPA注解实现联合主键 在JPA中,我们可以通过`@IdClass`和`@Id`注解来实现联合主键。下面将详细介绍如何通过这些注解来实现联合主键。 ### 创建...
在Hibernate中,我们可以使用`@Embeddable`和`@EmbeddedId`注解来定义和使用联合主键。 1. **创建联合主键类:** 在MyEclipse中,我们首先创建一个Java类来表示联合主键。这个类需要被标记为`@Embeddable`,并包含...
在某些情况下,一个实体可能需要多个字段来唯一标识其实例,这时就需要使用联合主键。本篇文章将深入探讨JPA中的联合主键概念、实现方式以及其在实际应用中的使用场景。 ### JPA 基本概念 JPA 是一种Java规范,它...
在EOS这样的分布式账本系统中,数据的完整性与唯一性尤为重要,因此理解并正确使用联合主键是开发者必须掌握的技能。 首先,我们来解释一下什么是主键。在关系型数据库中,主键是用于唯一标识表中每一行记录的字段...
在Java的持久化框架Hibernate中,联合主键(Composite Key)是一种特殊的数据模型设计,用于处理具有多个字段作为主键的实体。联合主键通常在数据表中的某些列共同决定了唯一标识的情况出现。在Hibernate中,有三种...
使用@IdClass创建联合主键,并实现外部关联 在 Java Persistence API(JPA)中,联合主键是指由多个字段组成的主键,可以使用@IdClass注解来实现。在本文中,我们将介绍如何使用@IdClass创建联合主键,并实现外部...
理解和熟练使用联合主键是JPA开发中不可或缺的一部分,它能够帮助你构建更健壮、符合业务逻辑的数据模型。在实际项目中,要充分考虑联合主键的生成、赋值、查询以及与其他组件的交互,以确保数据完整性和一致性。
在使用联合主键的实体进行查询时,需要提供所有主键字段的值。例如,查询特定用户和课程的关联记录: ```java EntityManager entityManager = entityManagerFactory.createEntityManager(); UserCourseKey key = ...
- 当使用联合主键时,JPA默认不会生成主键值,通常需要自定义生成策略或手动设置主键值。 - 在保存或更新实体时,确保联合主键的所有字段都有值,否则会抛出异常。 理解并正确使用JPA中的联合主键对于开发复杂的...
在 Hibernate 中,联合主键(Composite Key)是指由两个或多个属性共同构成的主键,这种主键在数据库设计中常见于需要多个字段唯一标识一条记录的情况。在 Hibernate 中设置联合主键通常需要以下几个步骤: 1. **...
以上就是如何在Android应用中使用ORMLite模拟实现联合主键的基本步骤。这种方法允许我们在不直接支持联合主键的ORMLite框架中实现类似的功能,从而满足特定的数据库设计需求。在实际项目中,可能还需要根据具体情况...
本文将详细介绍如何使用Hibernate注解来定义联合主键。 首先,我们需要了解联合主键的定义方式。在Hibernate API中,有三种方法来定义联合主键: 1. 使用`@Embeddable`注解定义一个独立的主键类,然后将这个类的...
**Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。它的目标是提供一种简单、高效的API,让...理解并正确使用联合主键对于构建高效、可靠的JPA应用程序至关重要。
在JPA中,我们可以使用`@IdClass`或`@EmbeddedId`注解来处理联合主键。这两种方法有其不同的应用场景和优缺点。 1. **使用@IdClass** `@IdClass`注解允许我们创建一个独立的类(通常是`KeyClass`)来表示联合主键...
在某些情况下,一个实体可能需要由多个字段共同构成主键,这时就需要使用联合主键,也就是`JPACompositePK`。这篇博客文章将深入探讨JPA中如何处理复合主键,以及它们在实际开发中的应用。 ### 一、JPA 联合主键...
例如,在`s2sh_relation05_one2one_uni_fk_composite`的示例中,假设我们有一个`Student`实体和一个`Address`实体,它们之间存在一对一(One-to-One)的关系,并且`Address`使用联合主键。`Address`实体的主键可能...
本篇文章将详细讲解如何在Oracle中删除主键、查看主键约束,以及创建联合主键。 1. 删除主键 在Oracle中,删除主键约束有几种方法。首先,你可以尝试使用`ALTER TABLE`语句删除主键,语法如下: ```sql ALTER ...
阅读指南基本概念创建表时定义主键约束修改表时定义主键约束删除主键约束 ...当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。 创建表时定义主键约束
同时,Hibernate的Criteria API或HQL(Hibernate Query Language)可以帮助进行复杂的数据库查询,包括涉及多表连接的查询,这些查询可能涉及到联合主键和外键的使用。 综上所述,SSH2+JSON的结合提供了强大的后端...