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

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

通常原因分两种:

[email protected](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)即可解决。

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

时间: 2024-08-28 00:21:35

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

spring-data-jpa 中文文档(2)

spring-data-jpa 中文文档(2) JPA Repositories 简介 Spring命名空间 SpringData使用了自定义的命名空间去定义repository.通常我们会使用repositories元素: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns

Android中利用SharedPreferences保存信息

package com.example.sharepreferen; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.vi

机器学习-Python中训练模型的保存和再使用

在做模型训练的时候,尤其是在训练集上做交叉验证,通常想要将模型保存下来,然后放到独立的测试集上测试,下面介绍的是Python中训练模型的保存和再使用. scikit-learn已经有了模型持久化的操作,导入joblib即可 from sklearn.externals import joblib 模型保存 >>> os.chdir("workspace/model_save") >>> from sklearn import svm >>

STL中list中push_back(对象)保存对象的内部实现

STL中list中push_back(对象)保存对象的内部实现 1. 在容器中,存放的是对象拷贝 #include<iostream> #include<list> using namespace std; class A{ int i; static int num; public: A():i(0){ cout<<"A()" <<endl; num ++;} A(int ii):i(ii){ cout<<"A(i

程序在运行过程中变量的保存位置与生命周期

本例说明了一个程序在运行的时候,各种变量所保存的位置.因为位置不同,自然,变量的生命周期也各不相同. 代码示例: #include <iostream> using namespace std; int nGNum1; void showStackAddress(){    cout<<"address of showStackAddress() is:\t["<<(void*)&showStackAddress<<"]

怎样将 FineReader中识别结果保存为XLS和XLSX格式

ABBYY FineReader是一款OCR文字识别软件,使用该软件识别文本时,识别结果可以保存至文件.发送至另一应用程序.复制到剪贴板或者通过电子邮件发送.OCR识别结果除了可以保存为DOCX.ODT.RTF格式和TXT格式之外,还可以保存为XLS和XLSX格式 ,那么如何在ABBYY FineReader中将识别结果保存为XLS和XLSX格式呢? 若有疑问可直接访问:http://www.abbyychina.com/FRshiyongjiqiao/abbyyfr-xlsgeshi.html

iOS中使用SFHFKeychainUtils保存用户密码

iOS中使用SFHFKeychainUtils保存用户密码,有需要的朋友可以参考下. 项目中需要保存用户密码,以实现自动登录的功能.于是,研究了下iOS保存密码的方法: 1.保存用户密码的安全方法 作为一名iPhone开发者,你需要对你的用户安全负责.请问,你是怎么保存用户的密码的?直接保存到plist文件里?加密?AES? DES?能保证你的代码不被反编译拿到你的加密Key? 这也未免太不苹果了吧.我Google了一下,国内的开发者根本没有注意到这个问题. 苹果系统中有个程序叫"钥匙串&quo

spring-data-jpa 中文文档(1)

spring-data-jpa 中文文档(1) 简介 为了让Spring Data的版本保持一致,可以使用maven提供的dependencyManagement <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-releasetrain</a

怎么在CAD中设置文件保存的格式

不知道小伙伴们在CAD编辑器中进行CAD制图的过程中有没有遇到过这样的问题,就是在CAD编辑器中绘制的CAD图纸绘制完成后,我们都是会将CAD图纸进行保存的,以便下次方便打开查看,但是经常遇到的情况是保存的图纸文件打不开了,这是为什么呢!这个可能和我们保存文件的格式有关系,那怎么在CAD中设置文件保存的格式呢?那下面我们就一起来看看解决方法吧! 第一步:首先,在电脑桌面中任意打开一个浏览器,在浏览器中搜索迅捷CAD编辑器,进入官网,然后根据系统提示的安装步骤进行安装最新版本的CAD编辑器进行使用