最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用JPA自定義id策略避免主鍵自增

 更新時間:2024年08月12日 09:18:02   作者:勉之~  
這篇文章主要介紹了使用JPA自定義id策略避免主鍵自增問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

JPA自定義id策略避免主鍵自增

1.實體Entity處理

/**
	 * 主鍵id
	 */
	@Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "myid")
    @GenericGenerator(name = "myid",
            strategy = "com.strategy.ManulInsertGenerator")
   	@Column(name = "id" )
	private Long id;

2.策略的設(shè)置

package com.strategy;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentityGenerator;
import java.io.Serializable;

/**
 *  自定義的主鍵生成策略,如果填寫了主鍵id,如果數(shù)據(jù)庫中沒有這條記錄,則新增指定id的記錄;否則更新記錄
 *
 *  如果不填寫主鍵id,則利用數(shù)據(jù)庫本身的自增策略指定id
 *
 */
public class ManulInsertGenerator extends IdentityGenerator {

    @Override
    public Serializable generate(SharedSessionContractImplementor s, Object obj) throws HibernateException {
        Serializable id = s.getEntityPersister(null, obj).getClassMetadata().getIdentifier(obj, s);

        if (id != null && Integer.valueOf(id.toString()) > 0) {
            return id;
        } else {
            return super.generate(s, obj);
        }
    }
}

3.jpa多表分頁處理

 @Override
   public List<RetUser> userPageList(ReqQueryUser input, String appKey) {
        QRoleEntity qRoleEntity = QRoleEntity.roleEntity;
        QHrGroupEntity qHrGroupEntity = QHrGroupEntity.hrGroupEntity;
        QUserRoleEntity qUserRoleEntity = QUserRoleEntity.userRoleEntity;
        QUserDeptEntity qUserDeptEntity = QUserDeptEntity.userDeptEntity;
        JPAQuery<UserEntity> query = jpaQueryFactory.selectFrom(qUserEntity)
                .leftJoin(qUserRoleEntity).on(qUserEntity.id.eq(qUserRoleEntity.userId)
                .and(qUserEntity.deleted.isFalse()).and(qUserRoleEntity.deleted.isFalse()).and(qUserRoleEntity.appKey.eq(appKey)))
                .leftJoin(qRoleEntity).on(qRoleEntity.id.eq(qUserRoleEntity.roleId)
                        .and(qRoleEntity.deleted.isFalse()).and(qUserRoleEntity.deleted.isFalse()).and(qUserRoleEntity.appKey.eq(appKey)))
                .leftJoin(qUserDeptEntity).on(qUserEntity.id.eq(qUserDeptEntity.userId)
                .and(qUserEntity.deleted.isFalse()).and(qUserDeptEntity.deleted.isFalse()).and(qUserDeptEntity.appKey.eq(appKey)))
                .leftJoin(qHrGroupEntity).on(qHrGroupEntity.id.eq(qUserDeptEntity.deptId)
                        .and(qHrGroupEntity.deleted.isFalse()).and(qUserDeptEntity.deleted.isFalse()).and(qUserDeptEntity.appKey.eq(appKey)))
                .orderBy(qUserEntity.id.asc());
        if (!CollectionUtils.isEmpty(input.getUserIds())) {
            query.where(qUserEntity.id.in(input.getUserIds()));
        }
        if (!StringUtils.isEmpty(input.getAdAccount())) {
            query.where(qUserEntity.adAccount.like("%" + input.getAdAccount() + "%"));
        }
        if (!StringUtils.isEmpty(input.getUserName())) {
            query.where(qUserEntity.userName.like("%" + input.getUserName() + "%"));
        }
        if (!StringUtils.isEmpty(input.getEmail())) {
            query.where(qUserEntity.email.eq(input.getEmail()));
        }
        if (!StringUtils.isEmpty(input.getMobile())) {
            query.where(qUserEntity.mobile.eq(input.getMobile()));
        }
        if (!StringUtils.isEmpty(input.getDeptName())) {
            query.where(qHrGroupEntity.groupName.like("%" + input.getDeptName() + "%"));
        }
        if (!StringUtils.isEmpty(input.getRoleName())) {
            query.where(qRoleEntity.roleName.like("%" + input.getRoleName() + "%"));
        }
        if (Objects.nonNull(input.getGender()) && input.getGender() == 0) {
            query.where(qUserEntity.gender.isFalse());
        }
        if (Objects.nonNull(input.getGender()) && input.getGender() == 1) {
            query.where(qUserEntity.gender.isTrue());
        }
        List<UserEntity> userEntities = query.select(Projections.bean(UserEntity.class,
                qUserEntity.id, qUserEntity.userName, qUserEntity.email,
                qUserEntity.adAccount, qUserEntity.mobile, qUserEntity.birthday,
                qUserEntity.createdAt, qUserEntity.createdBy, qUserEntity.currAppKey,
                qUserEntity.gender, qUserEntity.externalId, qUserEntity.disabled,
                qUserEntity.remark,qUserEntity.address,qUserEntity.headImage,qUserEntity.userNameEn,
                qRoleEntity.id.as("roleId"), qRoleEntity.roleName, qRoleEntity.roleCode,
                qHrGroupEntity.id.as("deptId"), qHrGroupEntity.groupName.as("deptName"),
                qHrGroupEntity.id.as("departmentId"), qHrGroupEntity.groupName.as("departmentName"))).fetch();
        //分頁
        PageUtil.queryWithPaging(input.getPage(), query, qUserEntity);
        List<RetUser> retUserList = new ArrayList<>();
        if (!CollectionUtils.isEmpty(userEntities)) {
            userEntities.forEach(userEntity -> {
                RetUser retUser = new RetUser();
                BeanUtils.copyProperties(userEntity, retUser);
                retUser.setGender(userEntity.getGender() == false ? 0 : 1);
                retUser.setStatus(userEntity.getDisabled() == false ? 0 : 1);
                retUserList.add(retUser);
            });
        }
        return retUserList;
    }

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java定時/延時任務(wù)之Timer用法詳解

    Java定時/延時任務(wù)之Timer用法詳解

    在?Java?Development?Kit?(JDK)?中,java.util.Timer?是一個用于調(diào)度任務(wù)的工具類,本文主要來和大家聊聊Timer的用法,有需要的小伙伴可以了解下
    2024-12-12
  • javaweb中Filter(過濾器)的常見應(yīng)用

    javaweb中Filter(過濾器)的常見應(yīng)用

    這篇文章主要介紹了javaweb中Filter的常見應(yīng)用,過濾器的使用方法,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Java新手環(huán)境搭建 JDK8安裝配置教程

    Java新手環(huán)境搭建 JDK8安裝配置教程

    這篇文章主要為大家詳細介紹了Java新手環(huán)境搭建,JDK8安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 基于Java8 Stream API實現(xiàn)數(shù)據(jù)抽取收集

    基于Java8 Stream API實現(xiàn)數(shù)據(jù)抽取收集

    這篇文章主要介紹了基于Java8 Stream API實現(xiàn)數(shù)據(jù)抽取收集,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 基于SpringBoot構(gòu)建電商秒殺項目代碼實例

    基于SpringBoot構(gòu)建電商秒殺項目代碼實例

    這篇文章主要介紹了基于SpringBoot構(gòu)建電商秒殺項目代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • Java服務(wù)端如何解決跨域問題?CORS請求頭方式

    Java服務(wù)端如何解決跨域問題?CORS請求頭方式

    這篇文章主要介紹了Java服務(wù)端如何解決跨域問題?CORS請求頭方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • JAVA調(diào)用JavaScript的方法示例

    JAVA調(diào)用JavaScript的方法示例

    本文主要介紹了JAVA調(diào)用JavaScript的方法示例,主要介紹了兩種方式,一種是使用Java的ScriptEngine接口,另一種是使用Java的URLConnection類來獲取JS文件,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • java發(fā)送短信系列之限制發(fā)送頻率

    java發(fā)送短信系列之限制發(fā)送頻率

    這篇文章主要為大家詳細介紹了java發(fā)送短信系列之限制發(fā)送頻率,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • java中ssh2執(zhí)行多條命令的四種方法

    java中ssh2執(zhí)行多條命令的四種方法

    本文主要介紹了java中ssh2執(zhí)行多條命令的四種方法,包括分號分隔、管道分隔、EOF塊、腳本調(diào)用,可確保環(huán)境配置生效,提升操作效率,具有一定的參考價值,感興趣的可以了解一下
    2025-09-09
  • Java 基礎(chǔ)語法之解析 Java 的包和繼承

    Java 基礎(chǔ)語法之解析 Java 的包和繼承

    包是組織類的一種方式,繼承顧名思義,比如誰繼承了長輩的產(chǎn)業(yè),其實這里的繼承和我們生活中的繼承很類似,下面文字將為大家詳細介紹Java的包和繼承
    2021-09-09

最新評論

老河口市| 灵石县| 隆林| 灌南县| 孟连| 巴塘县| 江油市| 辰溪县| 本溪市| 南投市| 渑池县| 河津市| 芜湖市| 琼海市| 疏附县| 若羌县| 桂平市| 泽普县| 汾西县| 观塘区| 冀州市| 平凉市| 荥阳市| 陕西省| 德令哈市| 苏尼特左旗| 邻水| 当阳市| 台中市| 抚顺县| 曲松县| 新和县| 平度市| 陈巴尔虎旗| 栖霞市| 揭西县| 稷山县| 阿拉善左旗| 芒康县| 葫芦岛市| 保山市|