You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate/JPA报错:object references an unsaved transient instance求助

解决JPA查询时的"object references an unsaved transient instance"报错

报错信息:

object references an unsaved transient instance - save the transient instance before flushing

相关实体类与DTO

Item实体类

@Data
@EqualsAndHashCode
@ToString
@Entity
@Table(name = "item")
public class Item {

    @NotNull
    @Id
    @SequenceGenerator(...)
    @GeneratedValue(...)
    @Column(name = "id")
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "desc")
    private String description;

    @Version
    @Column(name = "version")
    private Long version;

    @ManyToOne()
    @JoinColumn(name = "id_2")
    @ToString.Exclude
    @EqualsExclude
    private Item id_2;

    @ManyToOne()
    @JoinColumn(name = "id_3")
    @ToString.Exclude
    @EqualsExclude
    private Item id_3;
}

ItemDto

@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema(name="item")
public class ItemDto implements Serializable {

    @JsonIgnore
    private Long id;
    @NotNull
    private String name;
    private String description;
    private Long version;
    private ItemDto id_2;
    private ItemDto id_3;
}

Category实体类

@Data
@EqualsAndHashCode
@ToString
@Entity
@Table(name = "category")
public class Category implements Serializable {

    @NotNull
    @Id
    @SequenceGenerator(...)
    @GeneratedValue(strategy ...)
    @Column(name = "category_id")
    private Long id;

    @Column(name = "description")
    private String description;

    @ManyToOne()
    @JoinColumn(name = "item_id")
    @ToString.Exclude
    @EqualsExclude
    private Item item;

    @Column(name = "version")
    private Long version;
}

CategoryDto

@Data
@Schema(name="Category")
public class CategoryDto implements Serializable {

    private Long id;
    @NotBlank
    private String description;
    @NotNull
    private ItemDto item;
    private Long version;
}

CategoryRepository

@Repository
public interface CategoryRepository extends JpaRepository<Category, Long> {

    List<Category> findByItem(Item item);
}

问题场景

服务层中尝试根据Item名称查询关联的Category,执行findByItem(item)时触发上述报错,代码如下:

protected ResponseEntity<List<CategoryDto>> filterCategoriesByItem(String name) {

    Item item = new Item();
    item.setName(name);

    // 此处触发transient/save flush报错
    List<CategoryDto> list = categoryRepository.findByItem(item)
         .stream()
         .map(mapper::toDto)
         .collect(Collectors.toList());
    ...
    ...
}

已尝试方案

试过各种cascade=CascadeType.ALL的组合,均无效,仍报错。

内容的提问来源于stack exchange,提问作者klabbaparn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:45:30