zoukankan      html  css  js  c++  java
  • JPA自定义实体的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;
    

      

  • 相关阅读:
    如何在spring框架中解决多数据源的问题
    Spring动态配置多数据源
    SSH配置动态数据源
    Js操作Select大全
    SSH自定义分页标签
    兼容ie[6-9]、火狐、Chrome、opera、maxthon3、360浏览器的js本地图片预览
    Hibernate关联关系配置(一对多、一对一和多对多)
    SSH整合配置二级缓存
    CKEditor实现图片上传
    ckeditor的详细配置
  • 原文地址:https://www.cnblogs.com/Cassie-wang/p/11176597.html
Copyright © 2011-2022 走看看