JPA自定義實體的id

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