Estou desenvolvendo uma API, utilizando spring boot e flyway pra migration e mysql no banco, estou com um problema quando estou realizando o cadastro na tabela de comentario, que deveria referenciar a atividade que foi comentada e o usuario que comentou, mas quando faço o cadastro ele tenta criar uma nova atividade informando que tem valores que estão nulos, ao invés de referenciar uma que ja existe. Eu ainda sou iniciante com Spring. Abaixo os códigos:
classe de comentário:
package med.voll.api.comentario;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import med.voll.api.atividade.Atividade;
import med.voll.api.usuario.Usuario;
import org.hibernate.annotations.Cascade;
import java.util.Date;
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@Entity(name = "comentario")
@Table(name = "comentario")
public class Comentario {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long Id;
private String titulo;
private String descricao_comentario;
private Date data_comentario;
@ManyToOne
@JoinColumn(name = "id_usuario")
private Usuario usuario;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_atividade")
private Atividade atividadecomentada;
public Comentario(DadosCadastroComentario dadosCadastroComentario){
this.titulo = dadosCadastroComentario.titulo();
this.descricao_comentario = dadosCadastroComentario.descricao_comentario();
this.data_comentario = dadosCadastroComentario.data_comentario();
this.usuario= dadosCadastroComentario.usuario();
this.atividadecomentada = dadosCadastroComentario.atividadecomentada();
}
public void atualizarInformacoes(DadosAtualizarComentario dadosAtualizarComentario) {
if(dadosAtualizarComentario.titulo() != null){
this.titulo = dadosAtualizarComentario.titulo();
}
if(dadosAtualizarComentario.descricao_comentario() != null){
this.descricao_comentario = dadosAtualizarComentario.descricao_comentario();
}
if(dadosAtualizarComentario.data_comentario() != null){
this.data_comentario = dadosAtualizarComentario.data_comentario();
}
if(dadosAtualizarComentario.usuario() != null){
this.usuario = dadosAtualizarComentario.usuario();
}
if(dadosAtualizarComentario.atividadecomentada() != null) {
this.atividadecomentada = dadosAtualizarComentario.atividadecomentada();
}
}
}
classe da atividade:
package med.voll.api.atividade;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import med.voll.api.projeto.Projeto;
import med.voll.api.usuario.Usuario;
import java.util.Date;
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@Entity(name = "atividade")
@Table(name = "atividade")
public class Atividade {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long Id;
private String titulo;
private String descricao;
private Date inicio;
private Date encerramento;
@Enumerated(EnumType.STRING)
private Estado estado;
@Enumerated(EnumType.STRING)
private Dificuldade dificuldade;
private int prioridade;
private String tempo_execucao;
@ManyToOne
@JoinColumn(name = "id_projeto")
private Projeto projeto;
@ManyToOne
@JoinColumn(name = "responsavel")
private Usuario responsavel;
private Boolean ativo;
public Atividade(DadosCadastroAtividade dadosCadastroAtividade){
this.ativo = true;
this.titulo = dadosCadastroAtividade.titulo();
this.descricao = dadosCadastroAtividade.descricao();
this.inicio = dadosCadastroAtividade.inicio();
this.encerramento = dadosCadastroAtividade.encerramento();
this.estado = dadosCadastroAtividade.estado();
this.dificuldade = dadosCadastroAtividade.dificuldade();
this.prioridade = dadosCadastroAtividade.prioridade();
this.tempo_execucao = dadosCadastroAtividade.tempo_execucao();
this.projeto = dadosCadastroAtividade.projeto();
this.responsavel = dadosCadastroAtividade.responsavel();
}
public void atualizarInformacoes(DadosAtualizarAtividade dadosAtualizarAtividade) {
if(dadosAtualizarAtividade.titulo() != null){
this.titulo = dadosAtualizarAtividade.titulo();
}
if(dadosAtualizarAtividade.descricao() != null){
this.descricao = dadosAtualizarAtividade.descricao();
}
if(dadosAtualizarAtividade.encerramento() != null){
this.encerramento = dadosAtualizarAtividade.encerramento();
}
if(dadosAtualizarAtividade.estado() != null){
this.estado = dadosAtualizarAtividade.estado();
}
if(dadosAtualizarAtividade.dificuldade() != null){
this.dificuldade = dadosAtualizarAtividade.dificuldade();
}
if(dadosAtualizarAtividade.prioridade() != 0){
this.prioridade = dadosAtualizarAtividade.prioridade();
}
if(dadosAtualizarAtividade.tempo_execucao() != null){
this.tempo_execucao = dadosAtualizarAtividade.tempo_execucao();
}
if(dadosAtualizarAtividade.responsavel() != null){
this.responsavel = dadosAtualizarAtividade.responsavel();
}
}
//Paginação
public void excluir() {
this.ativo = false;
}
}
Tabela do comentário no banco
CREATE TABLE comentario (
id INT NOT NULL AUTO_INCREMENT,
titulo VARCHAR(100) NOT NULL,
descricao_comentario VARCHAR(100)NOT NULL,
data_comentario DATE NOT NULL,
id_atividade INT,
id_usuario INT,
CONSTRAINT id_atividade_comentario FOREIGN KEY (id_atividade) REFERENCES futurize.atividade(id),
CONSTRAINT id_usuario_comentario FOREIGN KEY (id_usuario) REFERENCES futurize.usuario(id),
primary key (id)
)
Tabela da atividade no banco
CREATE TABLE atividade(
id INT NOT NULL AUTO_INCREMENT,
titulo VARCHAR(100) NOT NULL,
descricao VARCHAR(200),
inicio DATE NOT NULL,
encerramento DATE NOT NULL,
estado varchar(100) not null,
id_projeto INT,
responsavel INT,
CONSTRAINT id_projeto_atividade FOREIGN KEY (id_projeto) REFERENCES futurize.projeto(id),
CONSTRAINT responsavel FOREIGN KEY (responsavel) REFERENCES futurize.usuario(id),
primary key (id)
);