Transação no hibernate

Pessoal, tenho um metodo que deve ser atomico, ou seja, ou faz tudo ou nao faz nada no banco de dados, para tanto, cerquei ele com uma transação, utilizo o hibernate, neste meu metodo eu crio um objeto X e salvo ele no BD, dai logo em seguida, no mesmo metodo, eu crio um objeto Z em que a chave composta dele é formada pelo objeto X, recém criado, mas que ainda não foi comitado e o que tá acontecendo é que entao ao mandar salvar o objeto Z é lançada uma exceção que fala que não é possivel fazer o insert pois o X não existe, e não existe mesmo pois ainda não dei o commit no final do metodo. O que me intrigou é porque o hibernate lança essa exceção antes do final da transação (no commiit) que seria quando o X seria realmente gravado no BD, ou seja, se é uma transação ele deveria fazer tal verificação somente no commit. Alguem imagina o que possa estar acontecendo, para usar transação no hibernate é preciso setar alguma propriedade no hibernate.cfg?

Tem como postar o trecho do codigo que faz isso, naum consegui abstrair!
[]'s