Olá,
Estou fazendo um trabalho de aula e comecei a conhecer JPA e JSF para fazê-lo. Estou gostando bastante do que vi até agora.
Tenho uma classe (Entity) Conta que tem relacionamento com a classe Cliente (ManyToOne, obrigatório), também é possível haver um dependente do cliente, surgindo o relacionamento com a classe Dependente (ManyToOne, opcional):
@Entity
public class Conta implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ContaNumero")
private Long numero;
@Column(name="ContaDataEmissao")
@Temporal(TemporalType.DATE)
private Date dataEmissao;
@Column(name="ContaValor")
private Float valor;
@ManyToOne
@JoinColumn(name="ClienteCodigo")
private Cliente cliente;
@ManyToOne
@JoinColumns({
@JoinColumn(name="ClienteCodigo", referencedColumnName="ClienteCodigo"),
@JoinColumn(name="DependenteNome", referencedColumnName="DependenteNome", nullable=true)
})
private Dependente dependente;
@OneToMany(mappedBy="conta")
private List<ContaProgramacao> contaProgramacao;
//Getters e setters
}
Tenho problema na compilação de que a coluna "ClienteCodigo" foi citada duas vezes:
[color=red]Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: entities.Conta column: ClienteCodigo (should be mapped with insert="false" update="false")[/color]
Se eu incluo os atributos no campo para desativar insert e update, conforme pedido acima, aí ocorre:
[color=red]Caused by: org.hibernate.AnnotationException: Mixing insertable and non insertable columns in a property is not allowed: entities.Contadependente[/color]
Eu poderia tirar a referência com cliente dessa classe e acessar o cliente pelo dependente, certo? Não haveria a duplicidade. O problema é que o cliente sempre deverá ser informado, enquanto que o dependente é opcional, e se informado deve estar relacionado ao cliente.
Alguém me ajudaria a resolver esse problema?
Segue abaixo o diagrama de classes:
[img]http://img100.imageshack.us/img100/5374/financeirodiagrama.png[/img]