JPA自定义实体的id

博客讲述客户端数据库数据存入服务器时,因表的id设置自增,客户端实体id存入时被抹掉。解决办法是使用IdGenerator且继承IdentityGenerator ,若id为long型继承IdentityGenerator,string型继承UUIDGenerator,也可提取公共id用公共类接收。

背景:继上一篇文章,已经实现客户端数据库数据,存入服务器,但是,两张表的id不一样,应该是id设置自增了,所以虽然从客户端查出的实体带id,但是存入服务器时id被抹掉,按照服务端表的id序号向上自增,遂实现id存在的时候按照给定的id,不存在的时候自增

解决:

IdGenerator, ps:一定是继承IdentityGenerator, 刚开始写的是实现这个类,但是貌似不对,还有网上说id是long型的是继承IdentityGenerator, 如果是string的要继承UUIDGenerator

如果写公共的方法,也可以提取公共的id,用公共类去接收obj,我这只是测试,所以直接使用的是TestEntity

import java.io.Serializable;

import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentityGenerator;

import com.wqq.test.TestEntity;

public class IdGenerator extends IdentityGenerator{
    
    @Override
    public Serializable generate(SharedSessionContractImplementor s, Object obj) throws HibernateException {
        if (obj == null){
            throw new HibernateException(new NullPointerException()) ;
        }
        Long id = null;
        if (obj instanceof TestEntity) {
            id = ((TestEntity)obj).getId();
        }
        
        if (null == id) {
            return super.generate(s, obj);
        }else {
            return id;
        }
        
    }
    
}

 

实体类上面

        @Id
	@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "idGenerator")
	@GenericGenerator(name = "idGenerator", strategy = "com.wqq.test.helper.IdGenerator")
	@Column(name = "rid")
	private Long id;

  

转载于:https://www.cnblogs.com/Cassie-wang/p/11176597.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值