Marques,
Primeiramente eu fiz algumas alterações que achei interessante, como por exemplo, ao invés de criar o campo tipo_conta como int, ou varchar para boolean.
Outra coisa, acredito que não precise de na tabela produto, ter o id_contaDebito e o id_contaCredito. Criei uma tabela de ligação para um relacionamento, muitos para muitos.
Caso eu tenho entendido algo errado, pode falar, por favor.
Segue o mapeamento das classes.
produto.java
@Entity
@Table(name="tb_produto")
public class Produto {
@Id
@GeneratedValue
@Column(name="id_produto", nullable=false, unique=true)
private Integer id;
@Column(name="txt_descricao", nullable=false, unique=true)
private String descricao;
@ManyToMany(targetEntity=hiberapp0.Contabil.class, cascade={CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(
name="tb_produto_contabil",
joinColumns={@JoinColumn(name="id_contabil", table="tb_contabil")},
inverseJoinColumns = @JoinColumn( name="id_produto")
)
private Set<Contabil> conta;
//gets ans sets
}
Contabil.java
@Entity
@Table(name="tb_contabil")
public class Contabil {
@Id
@GeneratedValue
@Column(name="id_contabil", nullable=false, unique=true)
private Integer id;
@Column(name="txt_descricao", nullable=false, unique=false, length=255)
private String descricao;
@Column(name="bol_conta_credito", nullable=false, unique=false)
private boolean tipoContaCredito;
//gets and sets
}
Espero ter ajudado.