码迷,mamicode.com
首页 > 编程语言 > 详细

SpringDataJPA中出现的保存出现的Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist:

时间:2019-10-22 12:54:40      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:null   else   int   主键生成策略   ant   xtend   type   next   生成器   

出现这种问题是先看看自己的实体类主键策略

通常原因分两种:

1.@GeneratedValue(strategy=GenerationType.IDENTITY)

    这种主键策略是自增长,数据库中设置主键自增和在对应的实体类中设置对应的主键自增,只要有哪一边没有设置,就会报该异常

2.我的数据表主键不是自增长,如图

技术图片

 

这是我自己写的主键生成策略

*主键生成工具类
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class PrimaryKeyAlgorithmUtil {

private static final long ONE_STEP = 10;
private static final Lock LOCK = new ReentrantLock();
private static long lastTime = System.currentTimeMillis();
private static short lastCount = 0;
private static int count = 0;

@SuppressWarnings("finally")
public static Long nextId()
{
LOCK.lock();
try {
if (lastCount == ONE_STEP) {
boolean done = false;
while (!done) {
long now = System.currentTimeMillis();
if (now == lastTime) {
try {
Thread.currentThread();
Thread.sleep(1);
} catch (java.lang.InterruptedException e) {
}
continue;
} else {
lastTime = now;
lastCount = 0;
done = true;
}
}
}
count = lastCount++;
}
finally
{
LOCK.unlock();
return Long.parseLong(lastTime+""+String.format("%03d",count));
}
}
}
*主键生成器
import org.hibernate.MappingException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import java.io.Serializable;

public class PrimaryKeyGenerator extends IdentityGenerator {

@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) throws MappingException {
Object id = PrimaryKeyAlgorithmUtil.nextId();
if (id != null) {
return (Serializable) id;
}
return super.generate(session, object);
}
*实体类
技术图片

技术图片

上图权限类和用户类为多对多的对应关系 现要插入一个,用户有多个权限
技术图片
当项目启动后调这个方法会出现异常
技术图片
这是因为数据表主键没有设置自增长,实体类也没设置id数据无法保存
只需要给实体setId(id)即可解决。

SpringDataJPA中出现的保存出现的Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist:

标签:null   else   int   主键生成策略   ant   xtend   type   next   生成器   

原文地址:https://www.cnblogs.com/zhanggguoqi/p/11718864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!