项目插入重复数据问题解决方案

博客介绍了在Java项目中使用Hibernate时遇到的重复数据插入问题。原表设计允许了UID和GAME_ID的重复,通过调整数据库设计,将UID和GAME_ID设为联合主键,解决了这个问题。同时,Hibernate的映射文件也进行了相应修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
	}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值