1.原项目表设计
在此只关心前3个列即可:
表ID
User表的ID
Game表的ID
但是此表插入时,UID和GAME_ID不应该有2条重复,项目中已做操作,但是还是会有漏网之鱼。
故此,去掉ID为主键,改为UID和GAME_ID为联合主键。
2.改过之后的数据库设计如下:
hibernate的映射文件改为如下:
<composite-id><!--联合主键-->
<key-property name="uid" column="UID" type="long"></key-property>
<key-property name="gameId" column="GAME_ID" type="long"></key-property>
</composite-id>
<property name="id" column="ID" type="long" />
对应实体类需要实现 Serializable接口,重写hashcode,equals方法(IDE可以自动生成hashcode和equals方法):
public class UserGameEntity implements Serializable{
private long id;
private long uid;
private long gameId;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (gameId ^ (gameId >>> 32));
result = prime * result + (int) (uid ^ (uid >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UserGameEntity other = (UserGameEntity) obj;
if (gameId != other.gameId)
return false;
if (uid != other.uid)
return false;
return true;
}