简体   繁体   中英

Problems in relationships between tables in JPA

I'm a little new to JPA and I'm trying to get my entity classes to work properly, but my code is always returning me this error: "Multiple writable mappings exist for the field [PRODUTOS.MARCA_IDMARCA]"

These are my entity classes:

@Entity
public class Marca implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer idMarca;
    private String nome;
    private Integer idFornecedores;
    .
    .
    .
}

I'm trying to make an unidirectional ManyToOne relationship between produtos and Marca (1 Marca to Many produtos):

@Entity
public class produtos implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long idProdutos;
    private int codBarras;
    private String nome;
    private float preco;
    private int qtdProduto;
    private int idCategoriaProduto;
    @ManyToOne
    private CategoriaProduto categoria;
    private int Marca_idMarca;
    @ManyToOne
    private Marca marca;
    .
    .
    .
}

Error:

Exception Description: Multiple writable mappings exist for the field [PRODUTOS.MARCA_IDMARCA]. Only one may be defined as writable, all others must be specified read-only.
Mapping: org.eclipse.persistence.mappings.ManyToOneMapping[marca]
Descriptor: RelationalDescriptor(ClassesDeEntidade.produtos --> [DatabaseTable(PRODUTOS)])

I really don't know what's happening. Can anyone explain to me why this code is wrong?

EDIT:

Table definitions:

Produtos:

CREATE TABLE IF NOT EXISTS mydb . Produtos ( idProdutos INT NOT NULL AUTO_INCREMENT, codBarras INT(13) NOT NULL, nome VARCHAR(150) NOT NULL, preco FLOAT NOT NULL, qtdProduto INT NOT NULL, idCategoriaProduto INT NOT NULL, Marca_idMarca INT NOT NULL, PRIMARY KEY ( idProdutos ), INDEX fk_Produtos_CategoriaProduto1_idx ( idCategoriaProduto ASC), INDEX fk_Produtos_Marca1_idx ( Marca_idMarca ASC), CONSTRAINT fk_Produtos_CategoriaProduto1 FOREIGN KEY ( idCategoriaProduto ) REFERENCES mydb . CategoriaProduto ( idCategoriaProduto ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT fk_Produtos_Marca1 FOREIGN KEY ( Marca_idMarca ) REFERENCES mydb . Marca ( idMarca ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;

Marca:

CREATE TABLE IF NOT EXISTS mydb . Marca ( idMarca INT NOT NULL AUTO_INCREMENT, nome VARCHAR(45) NOT NULL, idFornecedores INT NOT NULL, PRIMARY KEY ( idMarca ), INDEX fk_Marca_Fornecedores1_idx ( idFornecedores ASC), CONSTRAINT fk_Marca_Fornecedores1 FOREIGN KEY ( idFornecedores ) REFERENCES mydb . Fornecedores ( idFornecedores ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;

Can you show your table definitions? The problem seems to be that you have two fields (probably Marca marca , which have the @ManyToOne annotation and int Marca_idMarca , that has the same name) mapping to the same PRODUTO.ID_MARCA column in the database.

I know I should post this as a comment, but I'm not able to comment yet.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM