Thiagoaos, segui esse turorial que você postou, mas não consegui coloicar pra funcionar, esta seguindo o mesmo principio do tutorial, porem o compilador esta reclamando. O modelo é um relacionamento ManyToMany entre Produto e Loja, na tabela associativa, alem das chaves temos os atributos preço e data. O primeiro erro que da é quando ele reclama da anotação @Id em ProdutoLoja, ele diz que a coluna produtoLojaId não pode ser achada na tabela produtoLoja, realmente nao existe o id esta na classe ProdutoLojaId. Alterando a anotação para @EmbeddedId o erro desaparece, mas o compilador da erro na linha “@OneToMany(mappedBy=“produtoLojaId.produto”, targetEntity=ProdutoLoja.class)” em Produto.java. O apresentado é de que o mappedBy especificado para lstProdutoLoja não existe na entidade alvo.
Produto.java
@Entity
@Table(name=“produto”,catalog=“homecontrol”)
public class Produto implements java.io.Serializable {
// Fields
private static final long serialVersionUID = 1L;
@Id
@Column(name="PK_PRODUTO", unique=false, nullable=false, insertable=true, updatable=false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer pkProduto;
private String nome;
private String descricao;
@OneToMany(mappedBy="produtoLojaId.produto", targetEntity=ProdutoLoja.class)
private List<ProdutoLoja> lstProdutoLoja;
... getters and setters
ProdutoLoja.java
@Entity
@Table(name=“produto_loja”,catalog=“homecontrol”)
public class ProdutoLoja implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private ProdutoLojaId produtoLojaId = new ProdutoLojaId();
@SuppressWarnings("unused")
@Column(name="FK_PRODUTO", nullable=false, updatable=false, insertable=false)
private Produto produto;
@SuppressWarnings("unused")
@Column(name="FK_LOJA", nullable=false, updatable=false, insertable=false)
private Loja loja;
@Temporal(TemporalType.DATE)
@Column(name="DATA", unique=false, nullable=false, insertable=true, updatable=true, length=0)
private Date data;
@Column(name="PRECO", unique=false, nullable=false, insertable=true, updatable=true, precision=10)
private Double preco;
public Produto getProduto() {
return produtoLojaId.getProduto();
}
public void setProduto(Produto produto) {
produtoLojaId.setProduto(produto);
}
public Loja getLoja() {
return produtoLojaId.getLoja();
}
public void setLoja(Loja loja) {
produtoLojaId.setLoja(loja);
}
... getters and setters
ProdutoLojaId.java
@Embeddable
public class ProdutoLojaId implements java.io.Serializable {
// Fields
@ManyToOne(cascade = {CascadeType.MERGE}, fetch=FetchType.EAGER)
private Loja loja;
@ManyToOne(cascade = {CascadeType.MERGE}, fetch=FetchType.EAGER)
private Produto produto;
// Constructors
/** default constructor */
public ProdutoLojaId() {
}
/** full constructor */
public ProdutoLojaId(Produto produto, Loja loja) {
this.loja = loja;
this.produto = produto;
}
// Property accessors
@Column(name="FK_LOJA", unique=false, nullable=false, insertable=true, updatable=true)
public Loja getLoja() {
return this.loja;
}
public void setLoja(Loja loja) {
this.loja = loja;
}
@Column(name="FK_PRODUTO", unique=false, nullable=false, insertable=true, updatable=true)
public Produto getProduto() {
return this.produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public boolean equals(Object other) {
if ( (this == other ) ) return true;
if ( (other == null ) ) return false;
if ( !(other instanceof ProdutoLojaId) ) return false;
ProdutoLojaId castOther = ( ProdutoLojaId ) other;
return ( (this.getLoja()==castOther.getLoja()) || ( this.getLoja()!=null && castOther.getLoja()!=null && this.getLoja().equals(castOther.getLoja()) ) )
&& ( (this.getProduto()==castOther.getProduto()) || ( this.getProduto()!=null && castOther.getProduto()!=null && this.getProduto().equals(castOther.getProduto()) ) );
}
public int hashCode() {
int result = 17;
result = 37 * result + ( getLoja() == null ? 0 : this.getLoja().hashCode() );
result = 37 * result + ( getProduto() == null ? 0 : this.getProduto().hashCode() );
return result;
}
}