微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Hibernate中为ManyToOne引用处理分配的ID

如何解决如何在Hibernate中为ManyToOne引用处理分配的ID

我有两个如下所示的实体-一个带有自动生成的ID,另一个带有分配的ID。 受让人的ID是从自身请求中发送的。 而且我之间有ManyToOne关系。但是当我插入它时显示下面的错误

"org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing: com.example.entity.Task.assignee->com.example.entity.Assignee

下面是我的课程和注释

package com.example.entity;
    @Data
    @Entity
    public class Task {
        @GeneratedValue(generator = "system-uuid")
        @Id
        private UUID id;
        private String name;
        private String description;
        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "assignee_id")
        private Assignee assignee;
    }

   
package com.example.entity;
    @Data
    @Entity
    public class Assignee implements Persistable<UUID> {
        @Id
        private UUID id;
        private String name;

    
        
        @OnetoMany(mappedBy = "assignee",fetch = FetchType.LAZY)
        private List<Task> tasks = new ArrayList<>();

        @Transient
        private boolean isNew = true;
    
        @Override
        public boolean isNew() {
            return isNew;
        }
    
        @PrePersist
        @PostLoad
        void markNotNew() {
            this.isNew = false;
        }
    }

下面是从控制器调用的我的存储库和服务类

@Repository
public interface TaskRepository extends JpaRepository<Task,UUID> {
}


@Service
@Slf4j
public class TaskServiceImpl implements TaskService {
 
    @Autowired
    TaskRepository taskRepository;
 
   @Override
    public Task create(Task request) {
        return taskRepository.save(task);
    }

    @Override
    public Task update(Task request) {
         return taskRepository.save(request);

    }
}

所以当我向邮递员发送请求时-如下所示

{
    "name": "test task","description": "Do this task man","assignee": {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6","name": "Lucia"
    }
}

所以我告诉任务-具有自动生成的ID,其中,从该API的调用者发送的受让人ID。但是我遇到了异常-当我调用存储库的保存方法时。它在抱怨要保存受让人,但是我给了Cascade.ALL 在实体的映射中。

org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing: com.example.entity.Task.assignee->com.example.entity.Assignee

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。