当试图在web应用程序上创建课程实体实例时,我们遇到以下错误。这是一个JHipster应用程序完整的错误日志,下面是,但主要错误是
org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: edu.uwf.cen6030.domain.User; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: edu.uwf.cen6030.domain.User
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:319)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:528)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:153)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:178)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
at com.sun.proxy.$Proxy183.save(Unknown Source)
at edu.uwf.cen6030.web.rest.CourseResource.createCourse(CourseResource.java:68)
更新的代码:
@PostMapping("/courses")
@Transactional()
public ResponseEntity<Course> createCourse(@Valid @RequestBody Course course) throws URISyntaxException {
log.debug("REST request to save Course : {}", course);
if (course.getId() != null) {
throw new BadRequestAlertException("A new course cannot already have an ID", ENTITY_NAME, "idexists");
}
if (Objects.isNull(course.getTeacher())) {
throw new BadRequestAlertException("Invalid association value provided", ENTITY_NAME, "null");
}
Long userId = course.getTeacher().getId();
userRepository.findById(userId).ifPresent(course::user);
Course result = courseRepository.save(course);
return ResponseEntity.created(new URI("/api/courses/" + result.getId()))
.headers(HeaderUtil.createEntityCreationAlert(applicationName, false, ENTITY_NAME, result.getId().toString()))
.body(result);
}
错误的原因是,您从教师id加载了一个用户实体,然后将其附加到User
字段,而它应该附加到教师ifPresent(Cource::teacher)
以及类级别CourserSource
或方法级别CourserSource#createCourse()
的@transactional
注释。
因此,Hibernate抱怨教师实体没有加载到EntityManager
中(即教师被分离),因为它来自JSON请求体,并且只包含一个ID。
我必须说,您附加的代码不能与git存储库中的代码一起编译。
以下修改后的代码通过CoursereSourceIT
单元测试
@PostMapping("/courses")
@Transactional
public ResponseEntity<Course> createCourse(@Valid @RequestBody Course course) throws URISyntaxException {
log.debug("REST request to save Course : {}", course);
if (course.getId() != null) {
throw new BadRequestAlertException("A new course cannot already have an ID", ENTITY_NAME, "idexists");
}
if (Objects.isNull(course.getTeacher())) {
throw new BadRequestAlertException("Invalid association value provided", ENTITY_NAME, "null");
}
Long userId = course.getTeacher().getId();
userRepository.findById(userId).ifPresent(course::teacher);
Course result = courseRepository.save(course);
return ResponseEntity.created(new URI("/api/courses/" + result.getId()))
.headers(HeaderUtil.createEntityCreationAlert(applicationName, false, ENTITY_NAME, result.getId().toString()))
.body(result);
}
问题内容: 我已经成功用hibernate写了我的第一个主要的孩子例子。几天后,我再次使用它并升级了一些库。不知道我做了什么,但是我再也无法使它运行了。有人可以帮助我找出返回以下错误消息的代码中的错误吗: hibernate映射: 编辑: InvoiceManager.java 发票.java InvoiceItem.java 编辑: 从客户端发送的JSON对象: 编辑: 一些详细信息: 我试图通
问题内容: 我正在创建一个简单的应用程序,只需使用将一行插入到表中(如果表不存在,则创建它)。 我为它的一个可运行示例附加了一些代码。 这是我得到的异常和stacktrace: 这是我的代码: 主班: 和Person类: 这是我的persistence.xml文件 -----------------------编辑-------------------------- – 我只是将提供程序更改为Ec
我在spring boot尝试用hibernate进行多对一的单向映射。我有以下几个学生班--很多 大学-一个班级 应用程序另存和运行为 但我的原因是:org.hibernate.PersistentObjectException:传递给Persisted的分离实体:jpa.many.to.oniredirectoral.model.university(位于org.hibernate.event
我有两个模型,一个用于存储用户详细信息,使用该Id,我试图将用户位置保存在另一个表中,该表使用用户的相同Id作为主键。 为什么我会出现这个错误?坚持是什么意思?我正在使用MySQL数据库(&I)
我最近开始为一个学校项目与JPA和Hibernate合作,它基本上在数据库中存储大陆、国家和城市。 当尝试在实体上使用持久化方法时,我得到了标题中提到的错误。 我访问过的任何一个线程都解决了许多更复杂的问题,但对我的情况没有真正的帮助。我希望通过在这里发帖找到一些指导。 这是数据库创建脚本。这是一个PostgreSQL数据库。 基本上,countries表使用continents表的ID作为外键,
我有如下雇员类 当我调用来persisting时,我会得到以下错误