2014-11-17 4 views
0

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

나는 (많은 produtos 1 마르카을) 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 :

하지가 mydb을 존재하는 경우 테이블을 만듭니다. Produtos ( idProdutos INT NOT NULL AUTO_INCREMENT, codBarras INT (13) NULL NOT, nome VARCHAR (150) NULL NOT, preco FLOAT NULL NOT, qtdProduto INT NULL NOT, 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) 참조 mydb. ON이 업데이트에 대한 어떠한 조치 NO ACTION 을 삭제할 CategoriaProduto (idCategoriaProduto) , CONSTRAINT fk_Produtos_Marca1 FOREIGN KEY (Marca_idMarca) REFERENCES mydb. Marca (idMarca) 아무 조치도 취하지 말 것. 업데이트 조치 없음) ENGINE = InnoDB;

마르카는 : NOT이 mydb을 존재하는 경우

테이블을 만듭니다. Marca ( idMarca INT NOT NULL AUTO_INCREMENT, nome VARCHAR (45) NULL NOT, idFornecedores INT NULL NOT, PRIMARY KEY (idMarca) INDEX fk_Marca_Fornecedores1_idx (idFornecedores ASC) CONSTRAINT fk_Marca_Fornecedores1 FOREIGN KEY (idFornecedores) REFERENCES (idFornecedores) 아무 조치도 취하지 말 것. 업데이트 조치 없음) ENGINE = InnoDB;

답변

0

테이블 정의를 표시 할 수 있습니까? 문제는 데이터베이스의 동일한 PRODUTO.ID_MARCA 열로 매핑되는 (@ManyToOne 주석이 있고 int Marca_idMarca, 동일한 이름) 필드가 두 개있는 것 같습니다.

의견으로 게시해야하지만 아직 댓글을 작성할 수 없습니다.

+0

테이블 정의를 추가했습니다. 그러나 나는 아직도 문제가 무엇인지 파악하지 못했습니다. – Pedro

+0

'Marca' 객체를 참조하는'int Marca_idMarca'와'Marca marca'가 있습니까? 너 정말 이거 필요해? 왜냐하면 당신은 항상'marca.getIdMarca()'에 의해 id를 얻을 수 있기 때문이다. – brlaranjeira

+0

이것이 문제였던 것 같습니다. 이것을 고칠 때, 그것은 효과가있었습니다. 감사! – Pedro