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