Я немного новичок в JPA, и я стараюсь, чтобы мои классы сущностей работали правильно, но мой код всегда возвращает мне эту ошибку: «В поле есть много записываемых сопоставлений [PRODUTOS.MARCA_IDMARCA]»Проблемы во взаимоотношениях между таблицами в JPA
это мои классы сущностей:
@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;
.
.
.
}
Я пытаюсь сделать однонаправленный ManyToOne отношения между 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)])
Я действительно не знаю, что происходит. Может ли кто-нибудь объяснить мне, почему этот код неправильный?
EDIT:
Таблица определения:
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
ПОПЛАВКОВЫЕ NOT NULL, qtdProduto
INT NOT NULL, idCategoriaProduto
INT NOT NULL, Marca_idMarca
INT NOT NULL , ПЕРВИЧНЫЙ КЛЮЧ (idProdutos
), ИНДЕКС fk_Produtos_CategoriaProduto1_idx
(idCategoriaProduto
ASC), ИНДЕКС fk_Produtos_Marca1_idx
(Marca_idMarca
ASC), CONSTRAINT fk_Produtos_CategoriaProduto1
ИНОСТРАННОЙ КЛЮЧ (idCategoriaProduto
) СПИСОК ЛИТЕРАЕЙ mydb
. CategoriaProduto
(idCategoriaProduto
) ПО УДАЛИТЬ НЕТ ДЕЙСТВИЯ ON UPDATE NO ACTION, ОГРАНИЧЕНИЯ fk_Produtos_Marca1
FOREIGN KEY (Marca_idMarca
) ЛИТЕРАТУРА mydb
. Marca
(idMarca
) ON УДАЛИТЬ НЕТ ДЕЙСТВИЙ ПО ОБНОВЛЕНИЮ НЕТ ДЕЙСТВИЙ) ДВИГАТЕЛЬ = InnoDB;
Marca:
CREATE TABLE IF NOT EXISTS mydb
. Marca
( idMarca
INT NOT NULL AUTO_INCREMENT, nome
VARCHAR (45) NOT NULL, idFornecedores
INT NOT NULL, ПЕРВИЧНЫЙ КЛЮЧ (idMarca
), ИНДЕКС fk_Marca_Fornecedores1_idx
(idFornecedores
ASC), CONSTRAINT fk_Marca_Fornecedores1
FOREIGN KEY (idFornecedores
) ЛИТЕРАТУРА mydb
. Fornecedores
(idFornecedores
) ON УДАЛИТЬ НЕТ ДЕЙСТВИЙ ПО ОБНОВЛЕНИЮ НЕТ ДЕЙСТВИЙ) ДВИГАТЕЛЬ = InnoDB;
Я добавил определения таблиц. Но я все еще не понял, в чем проблема. – Pedro
У вас есть 'int Marca_idMarca' и' Marca marca', ссылающиеся на объект 'Marca', верно? Вам это действительно нужно? Потому что вы всегда можете получить идентификатор «marca.getIdMarca()». – brlaranjeira
Кажется, это была проблема. Когда я исправил это, он сработал. Благодаря! – Pedro