Olá pessoal,
estou tendo problemas com um mapeamento entre três classes, não sei nem como procurar este tipo de situação na web, por isso resolvi apelar diretamente aos experts do fórum.
A estrutura que preciso, de forma genérica é a apresentada a seguir.
@Entity
@Table
public class Agencia{
@Id
@Column(name = "ID", unique = true, nullable = false)
private int id;
@Column(name = "Nome", nullable = false)
private String nome;
/* ... */
}
@Entity
@Table
public class ContaCorrente{
@EmbeddedId
private ContaCorrentePK id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "agencia", nullable = false, insertable = false, updatable = false)
private Agencia agencia;
@Column(name = "conta", nullable = false, insertable = false, updatable = false)
private int conta;
/* ... */
}
A classe Agencia possui um inteiro como chave primária. Já a classe ContaCorrente possui como chave primária a Agencia e a Conta do indivíduo.
O problema esta na inclusão de uma terceira classe, conforme abaixo.
@Entity
@Table
public class Operacao{
@Id
@Column(name = "ID", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "Agencia", nullable = false, insertable=false, updatable=false)
private Agencia agencia;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name="Agencia"),
@JoinColumn(name="Conta")
})
private ContaCorrente contaCorrente;
/* ... */
}
Nesta tabela a agencia é obrigatória e a conta corrente não, para conseguir mapear, preciso colocar o insertable=false e updatable=false no campo agencia.
Ao tentar incluir um novo registro, só consigo gravar o valor da agência se for através da conta corrente. Só que existem casos em que a conta corrente não existe para uma operação.
Da mesma forma se eu tentar alterar um registro já existente, que não possui a conta corrente, ao dar um update o valor da agência é substituido por null.
Existe alguma forma de mapear isso?
Valeu…