背景:继上一篇文章,已经实现客户端数据库数据,存入服务器,可是,两张表的id不同,应该是id设置自增了,因此虽然从客户端查出的实体带id,可是存入服务器时id被抹掉,按照服务端表的id序号向上自增,遂实现id存在的时候按照给定的id,不存在的时候自增java
解决:数据库
IdGenerator, ps:必定是继承IdentityGenerator, 刚开始写的是实现这个类,可是貌似不对,还有网上说id是long型的是继承IdentityGenerator, 若是是string的要继承UUIDGenerator服务器
若是写公共的方法,也能够提取公共的id,用公共类去接收obj,我这只是测试,因此直接使用的是TestEntityide
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;