Olá,
Estou com um problema no mapeamento de chaves compostas utilizando hibernate annotations
Antes de utilizar annotations, eu mapeava a entidade ItemTabela que contem como chave composta um objeto Produto e um objeto Tabela.
<class name="entidades.ItemTabela" table="prd_item_tabela">
<composite-id>
<key-many-to-one name="produto" column="codProduto" class="entidades.Produto"/>
<key-many-to-one foreign-key="codTabelaPreco" name="tabelaPreco" column="codTabelaPreco" class="entidades.TabelaPreco"/>
</composite-id>
<property name="vlrProduto" type="java.lang.Float">
Ai alterando para annotations mapeie as entidades das seguintes formas:
PRODUTO.JAVA
@Entity
@Table(name="prd_produto")
@Proxy(lazy=false)
public class Produto {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long codProduto;
@ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinColumn(name="codSubfamilia",insertable=true,updatable=true,nullable=false)
@Fetch(FetchMode.JOIN)
private Subfamilia subfamilia;
private String dscProduto;
... (outros atributos e getters and setters)
TABELA_PREÇO
@Entity
@Table(name="prd_tabela_preco")
@Proxy(lazy=false)
public class TabelaPreco {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long codTabelaPreco;
@Temporal(TemporalType.DATE)
private Date datInicio;
@Temporal(TemporalType.DATE)
private Date datFim;
private Boolean indAtiva;
@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
private List<ItemTabela> itemTabelas = new ArrayList<ItemTabela>(0);
...
ITEM_TABELA
@Entity
@Table(name="prd_item_tabela")
@AssociationOverrides({
@AssociationOverride(name="id.produto", joinColumns = @JoinColumn(name="codProduto")),
@AssociationOverride(name="id.tabelaPreco", joinColumns = @JoinColumn(name="codTabelaPreco"))
})
@IdClass(ItemTabelaPK.class)
@Proxy(lazy=false)
public class ItemTabela {
@EmbeddedId
private ItemTabelaPK id;
private Float vlrProduto;
...
ITEM_TABELA_PK
@Embeddable
public class ItemTabelaPK implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToOne
private Produto produto;
@ManyToOne
private TabelaPreco tabelaPreco;
...
O erro que dá é o seguinte:
Caused by: org.hibernate.AnnotationException: Unable to find properties (produto, tabelaPreco) in entity annotated with @IdClass:br.com.id5.websad.produtos.entidades.ItemTabela
Ja tentei solucionar de diversas formas esse problema
como em outro relaciomento que tenho que utiliza chave composta PedidoProduto (e também não funciona)
@Entity
@Table(name="ped_pedido_prd_produto")
@Proxy(lazy=false)
public class PedidoProduto {
@Id
private PedidoProdutoId id;
@Embeddable
public class PedidoProdutoId implements Serializable{
private static final long serialVersionUID = 1L;
@Column(name="codPedido")
private Long codPedido;
@Column(name="codProduto")
private Long codProduto;
public Long getCodPedido() {
return codPedido;
}
public void setCodPedido(Long codPedido) {
this.codPedido = codPedido;
}
public Long getCodProduto() {
return codProduto;
}
public void setCodProduto(Long codProduto) {
this.codProduto = codProduto;
}
}
//chave composta
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="codPedido", insertable = false, updatable = false)
private Pedido pedido;
//chave composta
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="codProduto", insertable = false, updatable = false)
private Produto produto;
da forma acima da o seguinte erro:
org.springframework.orm.hibernate3.HibernateSystemException: ids for this class must be manually assigned before calling save()
tb com e sem, AssociationOverrides, tou apanhando feio…
Atenciosamente,
Dirceu