当前位置: 代码网 > it编程>编程语言>Asp.net > 使用JPA自定义id策略避免主键自增

使用JPA自定义id策略避免主键自增

2024年08月12日 Asp.net 我要评论
jpa自定义id策略避免主键自增1.实体entity处理/** * 主键id */@id @generatedvalue(strategy = generationtype.auto, gene

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.策略的设置

package com.strategy;
import org.hibernate.hibernateexception;
import org.hibernate.engine.spi.sharedsessioncontractimplementor;
import org.hibernate.id.identitygenerator;
import java.io.serializable;

/**
 *  自定义的主键生成策略,如果填写了主键id,如果数据库中没有这条记录,则新增指定id的记录;否则更新记录
 *
 *  如果不填写主键id,则利用数据库本身的自增策略指定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;
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com