[Dúvida] Android + JSON + Tomcat + Hibernate

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?