JPA中表之间关系的问题

时间:2014-11-17 18:52:37

标签: java mysql jpa entity many-to-one

我对JPA有点新意,我正在努力让我的实体类正常工作,但我的代码总是给我这个错误:“字段存在多个可写映射[PRODUTOS.MARCA_IDMARCA]”< / p>

这些是我的实体类:

@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;
    .
    .
    .
}

我正试图在produtos和Marca(1 Marca to Many produtos)之间建立单向的ManyToOne关系:

@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;
    .
    .
    .
}

错误:

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)])

我真的不知道发生了什么。任何人都可以向我解释为什么这段代码错了吗?

编辑:

表定义:

Produtos:

CREATE TABLE IF NOT NOT EXISTS mydbProdutos(   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_idxidCategoriaProduto ASC),   INDEX fk_Produtos_Marca1_idxMarca_idMarca ASC),   约束fk_Produtos_CategoriaProduto1     外键(idCategoriaProduto)     参考mydbCategoriaProdutoidCategoriaProduto)     无法删除操作     更新没有行动,   约束fk_Produtos_Marca1     外键(Marca_idMarca)     参考mydbMarcaidMarca)     无法删除操作     更新无动作)     ENGINE = InnoDB;

马卡:

CREATE TABLE IF NOT NOT EXISTS mydbMarca(   idMarca INT NOT NULL AUTO_INCREMENT,   nome VARCHAR(45)NOT NULL,   idFornecedores INT NOT NULL,   PRIMARY KEY(idMarca),   INDEX fk_Marca_Fornecedores1_idxidFornecedores ASC),   约束fk_Marca_Fornecedores1     外键(idFornecedores)     参考mydbFornecedoresidFornecedores)     无法删除操作     更新无动作)   ENGINE = InnoDB;

1 个答案:

答案 0 :(得分:0)

你能展示你的桌子定义吗? 问题似乎是您有两个字段(可能Marca marca,其中@ManyToOne注释和int Marca_idMarca具有相同名称)映射到同一PRODUTO.ID_MARCA列在数据库中。

我知道我应该将此作为评论发布,但我还无法发表评论。