Java 在springboot API上使用@OneToMany和@ManyToOne时出现错误消息

Java 在springboot API上使用@OneToMany和@ManyToOne时出现错误消息,java,spring,hibernate,spring-boot,spring-mvc,Java,Spring,Hibernate,Spring Boot,Spring Mvc,应用程序分为三类:货物(职位)、职能(员工)和Salario(工资)。当我注册一名员工时,他需要有薪水和职位。我有两个工作控制器,一个用于员工,一个用于职位,但我需要它们之间建立连接 以下是Functionarios(employees)类: 以下是货物(位置)类别: 这是Salarios(薪水)班 如果有帮助,以下是表及其在数据库中的显示方式: 当我尝试使用springboot的onetomay和manytoone时,我得到以下错误 启动ApplicationContext时出错。显示条件报

应用程序分为三类:货物(职位)、职能(员工)和Salario(工资)。当我注册一名员工时,他需要有薪水和职位。我有两个工作控制器,一个用于员工,一个用于职位,但我需要它们之间建立连接

以下是Functionarios(employees)类:

以下是货物(位置)类别:

这是Salarios(薪水)班

如果有帮助,以下是表及其在数据库中的显示方式:

当我尝试使用springboot的onetomay和manytoone时,我得到以下错误

启动ApplicationContext时出错。显示条件报告的步骤 在启用“调试”的情况下重新运行应用程序。2019-10-05 17:04:50.314 错误6716---[restartedMain]o.s.boot.SpringApplication
:应用程序运行失败

org.springframework.beans.factory.BeanCreationException:错误 创建在类路径中定义了名为“entityManagerFactory”的bean 资源 [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: 调用init方法失败;嵌套异常是 org.hibernate.AnnotationException:外键引用 name.of.package.Funcionarios from name.of.package.Cargos的列号错误。 应该是0 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1778) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]位于 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]位于 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]位于 org.springframework.boot.SpringApplication.run(SpringApplication.java:312) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]位于 org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]位于 org.springframework.boot.SpringApplication.run(SpringApplication.java:1204) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]位于 name.of.package.BolsasApplication.main(BolsasApplication.java:13) [classes/:na]位于sun.reflect.NativeMethodAccessorImpl.invoke0(本机) 方法)~(na:1.8.0_221)at sun.reflect.NativeMethodAccessorImpl.invoke(未知源) ~(na:1.8.0_221)at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源) 位于java.lang.reflect.Method.invoke的~[na:1.8.0221](未知源) ~[na:1.8.0_221]


我会更好,如果你只需要参考员工的工资。在实体中同时将双向关系建模为引用对象或集合要困难得多

您定义此项的方式不起作用,因为id不能同时是主生成列和外键

也许:
有帮助。

如果您只需要按员工列出薪资,我会更好。在实体中同时将双向关系建模为引用对象或集合要困难得多

您定义此项的方式不起作用,因为id不能同时是主生成列和外键

也许: 有帮助

  package name of the package;

import java.sql.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.validation.constraints.NotNull;

@Entity
public class Funcionarios {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @OneToMany
    private Long id;

    @NotNull
    private String nome;
    @NotNull
    private String email;
    @NotNull
    private Date nascimento;
    @NotNull
    private Date dataAdmissao;

    public Long getId() {
        return id;
    }

    public String getNome() {
        return nome;
    }

    public String getEmail() {
        return email;
    }

    public Date getNascimento() {
        return nascimento;
    }

    public Date getDataAdmissao() {
        return dataAdmissao;
    }

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

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setNascimento( Date nascimento) {
        this.nascimento = nascimento;
    }

    public void setDataAdmissao(Date dataAdmissao) {
        this.dataAdmissao = dataAdmissao;
    }

}
package name of the package;

import java.io.Serializable;
import java.time.LocalDateTime;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Cargos implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @ManyToOne
    @JoinColumn(name = "id")
    private Funcionarios id;

    private String descricao;
    private double valor;
    private double gratificacaoTeto;
    private LocalDateTime dataCriacao = LocalDateTime.now();

    public Funcionarios getId() {
        return id;
    }

    public String getDescricao() {
        return descricao;
    }

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

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

    public void setValor(double valor) {
        this.valor = valor;
    }

    public void setGratificacaoTeto(double gratificacaoTeto) {
        this.gratificacaoTeto = gratificacaoTeto;
    }

    public void setDataCriacao(LocalDateTime dataCriacao) {
        this.dataCriacao = dataCriacao;
    }

    public double getValor() {
        return valor;
    }

    public double getGratificacaoTeto() {
        return gratificacaoTeto;
    }

    public LocalDateTime getDataCriacao() {
        return dataCriacao;
    }

}
package package name of the package;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Salarios {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @ManyToOne
    @JoinColumn(name = "id")
    private Funcionarios id;

    private int data;
    private double gratificacao;

    @ManyToOne
    private Cargos cargos;

    @ManyToOne
    private Funcionarios funcionario;

    public Funcionarios getId() {
        return id;
    }

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

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public double getGratificacao() {
        return gratificacao;
    }

    public void setGratificacao(double gratificacao) {
        this.gratificacao = gratificacao;
    }

    public Cargos getCargos() {
        return cargos;
    }

    public void setCargos(Cargos cargos) {
        this.cargos = cargos;
    }

    public Funcionarios getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionarios funcionario) {
        this.funcionario = funcionario;
    }

}