Olá amigos do fórum. Por favor, se possível, me ajudem!

Estou com um problema ao tentar persistir entidades no Hibernate. Tenho essa entidade Usuario:
@Entity
@Table(name="Usuario")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="Tipo", discriminatorType=DiscriminatorType.STRING)
public abstract class Usuario implements Serializable {
private static final long serialVersionUID = 1L;
public enum TipoUsuario{
PessoaFisica("PF"), PessoaJuridica("PJ");
private String value;
private TipoUsuario(String value){
this.value = value;
}
public String getValue(){
return value;
}
public static TipoUsuario create(String value){
if (value.equals("PF"))
return PessoaFisica;
else if (value.equals("PJ"))
return PessoaJuridica;
else
return null;
}
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="IdUsuario")
private int id;
@Column(name="Tipo")
private String tipo;
@Column(name="Senha")
private String senha;
@Transient
private String confirmaSenha;
@Column(name="DtCadastro")
@Temporal(TemporalType.TIMESTAMP)
private Date dtCadastro;
@Column(name="Status")
private int status;
@Column(name="Newsletter")
private boolean newsletter;
@ManyToMany(fetch=FetchType.LAZY)
@Cascade(value={CascadeType.PERSIST})
@JoinTable(name="Usuario_Interesse",
joinColumns={@JoinColumn(name="IdUsuario")},
inverseJoinColumns={@JoinColumn(name="IdAssunto")})
private List<AssuntoNewsletter> interesses = new ArrayList<AssuntoNewsletter>();
@OneToMany(fetch=FetchType.LAZY)
@JoinColumn(name="IdUsuario")
@Cascade(value={CascadeType.PERSIST})
private List<UsuarioAcesso> acessos = new ArrayList<UsuarioAcesso>();
@OneToMany(fetch=FetchType.LAZY)
@JoinColumn(name="IdUsuario")
@Cascade(value={CascadeType.PERSIST})
private List<UsuarioEndereco> enderecos = new ArrayList<UsuarioEndereco>();
Reparem que ela tem relacionamentos com as entidades UsuarioAcesso, UsuarioEndereco, e com a tabela associativa Usuario_Interesse.
O código das outras entidades.
@Entity
@Table(name="Usuario_Acesso")
public class UsuarioAcesso implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="IdAcesso")
private int id;
@ManyToOne
@JoinColumn(name="IdUsuario")
private Usuario usuario;
@Column(name="Data")
@Temporal(value=TemporalType.TIMESTAMP)
private Date data;
@Column(name="Ip")
private String ip;
@Column(name="SessionId")
private String sessionId;
@Column(name="Obs")
private String obs;
@Entity
@Table(name="Usuario_Endereco")
public class UsuarioEndereco implements Serializable {
private static final long serialVersionUID = 1L;
public enum TipoEndereco {
Residencial("RS"), Cobrança("CB"), Comercial("CM");
private String value;
private TipoEndereco(String value){
this.value = value;
}
public String getValue(){
return value;
}
public static TipoEndereco create(String value){
if (value.equals("RS"))
return TipoEndereco.Residencial;
else if (value.equals("CB"))
return TipoEndereco.Cobrança;
else if (value.equals("CM"))
return TipoEndereco.Comercial;
else
return null;
}
}
@Id
@Column(name="IdEndereco")
private int id;
@ManyToOne
@JoinColumn(name="IdUsuario")
private Usuario usuario;
@Column(name="Tipo")
private String tipo;
@Column(name="Logradouro")
private String logradouro;
@Column(name="Numero")
private String numero;
@Column(name="Compl")
private String compl;
@Column(name="Bairro")
private String bairro;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="UF")
private EstadoFederacao UF;
@Column(name="Cidade")
private String cidade;
@Column(name="CEP")
private String CEP;
@OneToOne(cascade=CascadeType.PERSIST,
fetch=FetchType.EAGER)
@JoinColumn(name="IdEndereco")
private EnderecoGeo enderecoGeo;
No meu processo, ao persistir o usuario, eu vou ter um UsuarioEndereco e um UsuarioAcesso adicionado nas respectivas coleções, e quero persistir tudo em cascata. E aí…ocorre o malfadado
Acredito que seja algo errado no mapeamento, mas nao entendo o que é…tentei colocar o mappedby tambem, e o Hibernate não fez nada, nem deu erro nem persistiu… não entendo o que está errado, como eu posso persistir o UsuarioEndereco antes se ainda nao tenho o Usuario?
Ajudem amigos, por favor!
Obrigado a todos.