Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro Unidade de Trabalho

Ao realizar a consulta na Unidade de Trabalho é retornado um erro, vi que no banco de dados foi criada uma tabela de relacionamento, gostaria de saber como faço para não criar esta tabela de relacionamento funcionarios_unidade_trabalhos, abaixo as classes para analise: Funcionario

package br.com.alura.spring.data.orm;

import java.time.LocalDate;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@Entity
@Table(name="funcionarios")
public class Funcionario {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String nome;
    private String Cpf;
    private double salario;
    private LocalDate dataContratacao;

    @ManyToOne
    @JoinColumn(name = "cargo_id",nullable = false)
    private Cargo cargo;

    @Fetch(FetchMode.SELECT)
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "funcionarios_unidades",joinColumns = {
            @JoinColumn(name="fk_funcionario")},
    inverseJoinColumns = {@JoinColumn(name="fk_unidade")})
    private List<UnidadeTrabalho> unidadeTrabalhos;




    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }

    public double getSalario() {
        return salario;
    }
    public void setSalario(double salario) {
        this.salario = salario;
    }
    public LocalDate getDataContratacao() {
        return dataContratacao;
    }
    public void setDataContratacao(LocalDate dataContratacao) {
        this.dataContratacao = dataContratacao;
    }



    public String getCpf() {
        return Cpf;
    }
    public void setCpf(String cpf) {
        Cpf = cpf;
    }
    public Cargo getCargo() {
        return cargo;
    }
    public void setCargo(Cargo cargo) {
        this.cargo = cargo;
    }
    public List<UnidadeTrabalho> getUnidadeTrabalhos () {
        return unidadeTrabalhos;
    }
    public void setUnidadeTrabalhos (List<UnidadeTrabalho> unidadeTrabalhos ) {
        this.unidadeTrabalhos = unidadeTrabalhos ;
    }
    @Override
    public String toString() {
        return "Funcionario [id=" + id + ", nome=" + nome + ", Cpf=" + Cpf + ", salario=" + salario
                + ", dataContratacao=" + dataContratacao + ", cargo=" + cargo + ", unidadeTrablahos=" + unidadeTrabalhos
                + "]";
    }









}

Unidade de Trabalho

package br.com.alura.spring.data.orm;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity
@Table(name="unidade_trabalho")
public class UnidadeTrabalho {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String descricao;
    private String endereco;

    @ManyToMany(mappedBy = "unidadeTrabalhos",fetch = FetchType.EAGER)
    private List<Funcionario> funcionarios;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public List<Funcionario> getFuncionarios() {
        return funcionarios;
    }

    public void setFuncionarios(List<Funcionario> funcionarios) {
        this.funcionarios = funcionarios;
    }

    @Override
    public String toString() {
        return "UnidadeTrabalho [id=" + id + ", descricao=" + descricao + ", endereco=" + endereco + ", funcionarios="
                + funcionarios + "]";
    }        

}
3 respostas

segue o erro ao atualizar a unidade de trabalho, tbm tenho erro ao salvar o funcionario

2021-04-23 14:05:01.445 INFO 18107 --- [ restartedMain] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2021-04-23 14:05:01.475 ERROR 18107 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:822) [spring-boot-2.4.5.jar:2.4.5] at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:803) [spring-boot-2.4.5.jar:2.4.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:346) [spring-boot-2.4.5.jar:2.4.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340) [spring-boot-2.4.5.jar:2.4.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) [spring-boot-2.4.5.jar:2.4.5] at br.com.alura.spring.data.SpringDataApplication.main(SpringDataApplication.java:37) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_261] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_261] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_261] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_261] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.4.5.jar:2.4.5] Caused by: java.util.InputMismatchException: null at java.util.Scanner.throwFor(Scanner.java:864) ~[na:1.8.0_261] at java.util.Scanner.next(Scanner.java:1485) ~[na:1.8.0_261] at java.util.Scanner.nextInt(Scanner.java:2117) ~[na:1.8.0_261] at java.util.Scanner.nextInt(Scanner.java:2076) ~[na:1.8.0_261] at br.com.alura.spring.data.service.CrudUnidadeTrabalhoService.deletar(CrudUnidadeTrabalhoService.java:102) ~[classes/:na] at br.com.alura.spring.data.service.CrudUnidadeTrabalhoService.inicial(CrudUnidadeTrabalhoService.java:49) ~[classes/:na] at br.com.alura.spring.data.SpringDataApplication.run(SpringDataApplication.java:62) [classes/:na] at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:819) [spring-boot-2.4.5.jar:2.4.5] ... 10 common frames omitted

2021-04-23 14:05:01.481 INFO 18107 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2021-04-23 14:05:01.482 INFO 18107 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Shutdown initiated... 2021-04-23 14:05:01.520 INFO 18107 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Shutdown completed.

solução!

Ajustei o código conforme o programa do instrutor e funcionou, mas em um relacionamento ManyToMany é possível fazer para não criar uma tabela de relacionamento?

Fala Marcos, de boa?

Cara pensando em performance e mapeando, essa table de relacionamento é a melhor solução que existe, fora que a solução padrão implementada,