当前位置: 首页 > 知识库问答 >
问题:

JPA中表之间关系的问题

裴俊雅
2023-03-14

我是JPA的新手,我正试图让我的实体类正常工作,但我的代码总是给我返回这样的错误:“字段[produtos.marca_idmarca]存在多个可写映射”

这些是我的实体类:

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

错误:

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

如果不存在mydb则创建表。produtos(idprodutosINT NOT NULL AUTO_INCREMENT,codbarrasINT(13)NOT NULL,nomeVARCHAR(150)NULL,precoFLOAT NULL,qtdprodutoINT NOT NULL,idcategoriaprodutoINT NOT NULL,idcategoriaprodutomarca_idmarcaINT NULL,主键(idprodutos),索引to1_idx(idcategoriaprodutoASC),索引fk_produtos_marca1_idx(marca_idmarcaASC),约束fk_produtos_categoriaproduto1外键(idcategoriaproduto)引用mydbcategoriaproduto(idcategoriaproduto)删除时不执行更新时不执行任何操作,约束fk_produtos_marca1_idx外键code>)引用mydbmarca(idmarca)删除时不执行更新时不执行操作)引擎=innoDB;

马卡报:

如果不存在mydb则创建表。marca(idmarcaINT NOT NULL AUTO_INCREMENT,nomeVARCHAR(45)NOT NULL,idfornecedoresINT NOT NULL,主键(idmarca)、索引fk_marca_fornecedores1_idx(idfornecedoresASC)、约束fk_marca_fornecedores1外键(idfornecedores)引用mydbdores(idFornecedores)删除时无操作更新时无操作)引擎=innoDB;

共有1个答案

柳俊健
2023-03-14

你能显示你的表定义吗?问题似乎是,您有两个字段(可能是Marca,它具有@ManyToOne注释,以及int marca_idmarca,它具有相同的名称)映射到数据库中相同的produto.id_marca列。

我知道我应该把这个作为一个评论,但我还不能评论。

 类似资料:
  • 我读了很多问题,但还没有找到答案。 我有两个不同的表WeatherData: @实体公共类WeatherData实现可序列化{ 有人有主意吗? 谢谢

  • 模型(Model)之间存在各种各样的关系,如:一对一(One-To-One )、一对多(One-To-Many)等。模型间的关系本质上是对其代表的数据库中表之间的关系描述,通过这些关系可以实现数据库中表之间主/外键约束的创建。查询时也可以基于这些关系,生成在数据库中执行的连接查询或复合查询SQL语句。 关系/关联的使用 1.1 一对一(One-To-One)关联 1.2 一对多(One-To-Ma

  • 感谢(在Spring中使用@Valid vs@Validated)以及在Spring中使用@Valid和@Validated之间的差异。我现在明白他们之间的区别了。 然而,我无法理解特定的场景。 我在控制器endpoint中接收到一个整数,我想使用JSR-303进行验证(我只会使用最小值(1)),以确保得到一个整数 困惑-在我将放在控制器类上,尝试后,设置才起作用,但没有起作用。只是想弄明白为什么

  • 我正在为我的项目使用Spring Data JPA(以hibernate作为提供程序),并想知道何时需要实体之间的双向映射? 在我的用例中,我有一个实体,与实体具有关系。目前,我在实体中没有相应的关系。从我所能理解的查看其他帖子,除非我需要通过我的实体/Hibernate删除,否则我可能不需要这样做。我想知道通过双向关系我还能得到什么? 这是我的,不包括访问者: 这是,不包括访问器: 如果我一直在

  • 问题内容: 我的问题是,例如,当我创建一个表时:以下几列: 哪里是用。 然后以列为例: 凡是与外键是从。 应该是说我已经建立的关系和使用。 这两个表最初都是空的,因此我编写了以下SQL命令: 这很好用,但是当我尝试插入子表()时,它告诉我: 错误外键约束 所以基本上我想要做的是插入到父表,然后到子表,以便显示出来的(子表)的外键,相当于用在(父表)。 我必须先创建两个表,而无需使用外键,然后再尝试

  • 我的ImageRepository 谢谢你们的帮助!