背景:繼上一篇文章,已經實現客戶端數據庫數據,存入服務器,可是,兩張表的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;