Boa noite a todos, estou desenvolvendo um aplicativo para android que deve sincronizar com um servidor utilizando JSON através de um webservice RestFull rodando no Tomcat.
Optei então por utilizar o hibernate no servidor, mas estou apanhando pra fazer o mapeamento. Em primeiro momento seria a tabela de Clientes, que a chave é um sequencial, a tabela de contatos do cliente, que a chave é tbm um sequencial, mas possui chave estrangeira pra tabela de clientes, sendo not null, e a tabela dos módulos do cliente, que possui uma chave composta com o código do cliente e do módulo
@Entity
public class Cliente{
@Id
@GeneratedValue
private Long id;
@OneToMany(targetEntity=ContatoCli.class)
@LazyCollection(LazyCollectionOption.false)
@JoinColumn(name="CD_CLIENTE",referencedColumnName ="CD_CLIENTE")
private List<ContatoCli> listaContatos;
@OneToMany(targetEntity=ModuloCli.class)
@LazyCollection(LazyCollectionOption.false)
@JoinColumn(name="CD_CLIENTE",referencedColumnName ="CD_CLIENTE")
private List<ModuloCli> listaModulos;
//resto dos campos + getters/setters
}
@Entity
public class ContatoCli {
@Id
@GeneratedValue
private Long id;
@Column(name="CD_CLIENTE")
private Long idCliente;
//resto dos campos + getters/setters
}
@Entity
public class ModuloCli{
@Id
@Column(name="CD_CLIENTE")
private Long idCliente;
@Id
@Column(name="CD_MODULO")
private Long idModulo;
//getters/setters
}
Porém estou tendo muitos problemas durante a sincronização, pois quando for um cliente novo vai ter que inserir os registros das listas de contatos e módulos, e em alteração realizar o update nos mesmos, já tentei utilizar a opção Cascade do hibernate mas ainda não obtive sucesso. Já passei por exceções do tipo “no row with the given identifier exists” e “a different object with the same identifier value was already associated with the session” durante a inserção/alteração dos objetos dependentes da classe cliente, sendo que em alterações o hibernate está tentando setar o código do cliente como null nas tabelas dependentes, o que não é permitido no banco. O que devo alterar no mapeamento para funcionar corretamente?