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; }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论