Sping JPA. Как добавить сущность с уже существующими привязанными сущностями?

Spting JPA

У сущности Entity есть привязанная сущности BindingEntity

@Data
@Table(name = "entites")
@Entity
public class Entity {
...

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "binding_entity_id")
@EqualsAndHashCode.Exclude
@ToString.Exclude
private BindingEntity bindingEntity

}

@Data
@Table(name = "binding_entites")
@Entity    
public class BindingEntity {
  @Id
  private Long id;

  private String name;
}

Пытаюсь создать Entity с уже существующей BindingEntity

public Long createEntity(EntityDto entityDto) {
        entityDto.setId(null);
        Entity entity = entityMapper.toEntity(entityDto);

        Optional<BindingEntity> bindingEntity = bindingEntityService.find(entityDto.getBindingEntityId());
        if (bindingEntity.isEmpty())
            throw new BindingEntityNotFoundException();

        entity.setBinding(bindingEntity.get());

        return entityRepository.save(entity).getId();
}

public interface EntityRepository extends JpaRepository<Entity, Long> {
}

В итоге вылетает "org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing

Пробовал разные ставить разные каскады: @Cascade({CascadeType....}). Результатов два: - "org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing - добавляются новые экземпляры BindingEntity

Как добавить сущность с уже существующими привязанными сущностями?


Ответы (1 шт):

Автор решения: sboon

Возможно, нужно сохранять не bindingEntity, но entity, в createEntity:

return entityRepository.save(entity).getId();
→ Ссылка