Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Erro ao tentar cadastrar

oi boa tarde, estou tentando usar jpa e não esta dando certo. tenho a request json:

{
    "disciplina": "historia", 
    "description": "string",
    "aluno": [ 
        {
            "id": 3, 
            "nome": "fulano"
        }
    ]
}

mas estou com problemas nas entidades, pq aluno vem null, quando retiro o cascade, e com o cascade dá erro 500


@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@Entity
@Table(name = "disciplina")
public class DisciplinaEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "nome")
    private String name;
    @Column(name = "descricao")
    private String description;
    @OneToMany(mappedBy = "disc", cascade = CascadeType.PERSIST)// ja usei all e tb n deu
    private List<DisciplinaAlunoEntity> alunoList;
}
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@Entity
@Table(name = "disciplina_aluno")
public class DisciplinaAlunoEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @ManyToOne
    @JoinColumn(name = "id_disciplina")
    private DisciplinaEntity disc;
    @ManyToOne
    @JoinColumn(name = "id_aluno")
    private AlunoEntity aluno;
    @Column(name = "nome")
    private String name;
}

o objetivo é cadastrar disciplinas, mas tem aquele relacionamento ali. o aluno entity usei em outro fluxo, mas ele é assim:

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "aluno")
public class AlunoEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "nome")
    private String name;
}

erro

org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: br.com.teste..entity.DisciplinaAlunoEntity
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.teste.entity.DisciplinaAlunoEntity
1 resposta
solução!

Oi!

O problema é que está vindo o id do aluno no json. Então você tem duas alternativas:

  1. Carregar o aluno do banco pelo id e setar esse objeto aluno na disciplina
  2. Ignorar o id que está vindo e considerar que é um novo aluno sendo cadastrado (o cascade aqui ajuda nisso, mas o objeto aluno precisa ter o id null)