Persistência em Hibernate

Olá a todos!

Minha dúvida é a seguinte!

Estou com um projeto em que estou utilizando o Hibernate com annotations.
Fiz todos os beans com os relacionamentos, as daos, etc.

Gostaria de saber se há alguma maneira de fazer como no exemplo:

endereco.setRua(...);
endereco-setNumero(...);
...

aluno.setIdade(...);
....
....
aluno.setEndereco(endereco);

session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(aluno);

Minha dúvida é se posso salvar o bean aluno sem antes salvar o bean endereco.
Há algo nos annotations para eu poder apenas salvar o aluno e automaticamente persistir o endereco?
Alguma maneira de fazer um merge… ou algo assim.

Porque senão quando eu receber o objeto Aluno terei que criar um dao pra cada objeto que está no Aluno (como Endereco), salvá-lo para só então salvar o aluno…

Obrigado!

posta ae como estão suas tabelas do banco

@Entity
@Table(name = "Aluno")
public class Aluno implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "aluno_sequence_generator")
    @SequenceGenerator(name = "aluno_sequence_generator", sequenceName = "aluno_cod_aluno_seq", allocationSize = 1)
    @Column(name = "cod_aluno", nullable = false)
    private Integer codAluno;
    
    @Column(name = "nome", nullable = false)
    private String nome;
    
    @Column(name = "cpf", nullable = false)
    private String cpf;
    
    @Column(name = "rg", nullable = false)
    private String rg;
    
    @Column(name = "idade", nullable = false)
    private Integer idade;
    
    @OneToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinColumn(name="cod_situacao_pgto", unique=true)
    private SituacaoPagamento situacaoPagamento;
    
    @ManyToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinColumn(name = "cod_endereco")
    private Endereco endereco;
    
    @OneToMany(mappedBy = "aluno", fetch = FetchType.LAZY)
    @Cascade(org.hibernate.annotations.CascadeType.ALL)
    private List<Avaliacao> avaliacoes;
    
    @OneToMany(mappedBy = "aluno", fetch = FetchType.LAZY)
    @Cascade(org.hibernate.annotations.CascadeType.ALL)
    private List<Pagamento> pagamentos;
    
    @OneToMany(mappedBy = "aluno", fetch = FetchType.LAZY)
    @Cascade(org.hibernate.annotations.CascadeType.ALL)
    private List<Matricula> matriculas;

Essa é a tabela aluno…
Queria salvá-la sem precisar salvar os objetos que estão mapeado aí!

Valeu!

do jeito que está deveria estar inserindo automaticamente o endereço…não está inserindo automaticamente quando vc persiste o aluno?

Agora foi!
=)

Apenas troquei o CascadeType para ALL

Valeu a atenção ae!

Abrass

Olá!

Estou com outro problema…

Tenho um bean avaliação que contém os beans aluno, professor, tipo avaliação e resultado avaliação.

Para testar, crio os respectivos beans e depois incluo cada um no bean avaliação.
Porém quando vou dar um save no avaliação ocorre uma ConstraintViolationException.
Os inserts dos outros beans que estão contidos na avaliação ocorre com sucesso, porém o ultimo insert dá exceção.

Meu bean avaliação é o seguinte:


@Entity
@Table(name = "avaliacao")
public class Avaliacao implements java.io.Serializable 
{
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "avaliacao_sequence_generator")
    @SequenceGenerator(name = "avaliacao_sequence_generator", sequenceName = "avaliacao_cod_avaliacao_seq", allocationSize = 1)
    @Column(name = "cod_avaliacao", nullable = false)
    private Integer codAvaliacao;
    
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "cod_aluno")
    @Fetch(FetchMode.JOIN)
    @Cascade(org.hibernate.annotations.CascadeType.ALL)
    private Aluno aluno;
    
    @ManyToOne(cascade= {CascadeType.ALL})
    @JoinColumn(name = "cod_tipo_av")
    private TipoAvaliacao tipoAvaliacao;
    
    @ManyToOne(cascade= {CascadeType.ALL})
    @JoinColumn(name = "cod_professor")
    private Professor professor;
    
    @ManyToOne(cascade= {CascadeType.ALL})
    @JoinColumn(name = "cod_resultado")
    private Resultado resultado;
    
    @Column(name = "data", nullable = true)
    @Temporal(TemporalType.DATE)
    private Date data;

    public Avaliacao()
    {
        
    }

    public Integer getCodAvaliacao()
    {
        return codAvaliacao;
    }

    public void setCodAvaliacao(Integer codAvaliacao)
    {
        this.codAvaliacao = codAvaliacao;
    }

    public Aluno getAluno()
    {
        return aluno;
    }

    public void setAluno(Aluno aluno)
    {
        this.aluno = aluno;
    }

    public TipoAvaliacao getTipoAvaliacao()
    {
        return tipoAvaliacao;
    }

    public void setTipoAvaliacao(TipoAvaliacao tipoAvaliacao)
    {
        this.tipoAvaliacao = tipoAvaliacao;
    }

    public Professor getProfessor()
    {
        return professor;
    }

    public void setProfessor(Professor professor)
    {
        this.professor = professor;
    }

    public Resultado getResultado()
    {
        return resultado;
    }

    public void setResultado(Resultado resultado)
    {
        this.resultado = resultado;
    }

    public Date getData()
    {
        return data;
    }

    public void setData(Date data)
    {
        this.data = data;
    }
}

E o sql gerado quando dou um save do avaliacao é o seguinte:

Hibernate: select nextval ('avaliacao_cod_avaliacao_seq')
Hibernate: select nextval ('aluno_cod_aluno_seq')
Hibernate: select nextval ('endereco_cod_endereco_seq')
Hibernate: select nextval ('situacao_pgto_aluno_cod_situacao_pgto_seq')
Hibernate: select nextval ('professor_cod_professor_seq')
Hibernate: select nextval ('endereco_cod_endereco_seq')
Hibernate: select nextval ('resultado_avaliacao_cod_resultado_seq')
Hibernate: select nextval ('tipo_avaliacao_cod_tipo_av_seq')
Hibernate: insert into Endereco (bairro, cep, cidade, complemento, numero, rua, cod_endereco) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into situacao_pgto_aluno (meses_pagos, valor_total, vcto_sit_regular, cod_situacao_pgto) values (?, ?, ?, ?)
Hibernate: insert into Aluno (cpf, cod_endereco, idade, nome, rg, cod_situacao_pgto, cod_aluno) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into Endereco (bairro, cep, cidade, complemento, numero, rua, cod_endereco) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into Professor (cpf, cod_endereco, grau_escolaridade, idade, nome, rg, salario, cod_professor) values (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into resultado_avaliacao (altura, cod_avaliacao, freq_cardiac_mov, freq_cardiac_repouso, imc, largura_costas, peso, tam_biceps_dir, tam_biceps_esq, tam_coxa_dir, tam_coxa_esq, tam_panturrilha_dir, tam_panturrilha_esq, cod_resultado) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Espero ajuda de vocês…
Valeu!