Sql

9 respostas
ricardocomp

Olá pessoal, estou querendo fazer um relacionamento muito-para-muitos, ou seja, n:m no JPA
e não estou conseguindo inserir o campo nota na tabela intermediária aluno_disciplina :frowning: .

Eu estou fazendo da seguinte forma
Classe Aluno

public class Aluno extends Usuario implements Serializable {
...
    @ElementCollection    
    @JoinTable(name="aluno_disciplina", joinColumns={@JoinColumn(name="id_aluno")})        
    private List<JoinedAlunoDisciplina> listaDisciplinas;
...
}

Classe Disciplina

public class Disciplina implements Serializable {
...
    @ElementCollection
    @JoinTable(name="aluno_disciplina", joinColumns=@JoinColumn(name="id_disciplina"))
    private List<JoinedAlunoDisciplina> listaAlunos;
...
}

Classe JoinedAlunoDisciplina

@Embeddable 
public class JoinedAlunoDisciplina implements Serializable {

    @ManyToOne(fetch=FetchType.LAZY)
    @Column(name = "id_aluno", nullable = false) 
    private Aluno aluno; 
    @ManyToOne(fetch=FetchType.LAZY)
    @Column(name = "id_disciplina", nullable = false)
    private Disciplina disciplina;
    @NotNull
    @DecimalMax("10.00")
    @DecimalMin("0.00")
    @Digits(integer=2, fraction=2)
    @Column(name = "nota")
    private Float nota;

//get's e set's

}

Será que alguém poderia me dar uma ajuda?

[]'s.

9 Respostas

ricardocomp

Ninguém pessoal?

[]'s.

A

cara,

faz o seguinte

public class Aluno extends Usuario implements Serializable {
... 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "disciplina", fetch = FetchType.LAZY)      
    private List<JoinedAlunoDisciplina> listaDisciplinas;
...
}
public class Disciplina implements Serializable {  
...  
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "aluno", fetch = FetchType.LAZY)    
    private List<JoinedAlunoDisciplina> listaAlunos;  
...  
}
@Embeddable 
public class JoinedAlunoDisciplinaPK implements Serializable {

    
    @Column(name = "id_aluno") 
    private Integer aluno; 

    @Column(name = "id_disciplina")
    private Integer disciplina;
}
@Entity 
public class JoinedAlunoDisciplina implements Serializable {
    
       @EmbeddedId
       private JoinedAlunoDisciplinaPk joinedAlunoDisciplinaPK;


    @JoinColumn(name = "id_aluno", referencedColumnName = "id", insertable = false, updatable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Aluno aluno; 

   @JoinColumn(name = "id_disciplina", referencedColumnName = "id", insertable = false, updatable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Disciplina disciplina;

    @NotNull
    @DecimalMax("10.00")
    @DecimalMin("0.00")
    @Digits(integer=2, fraction=2)
    @Column(name = "nota")
    private Float nota;

//get's e set's

}

ve se funciona, t+

wbdsjunior

ricardocomp

Falaaa Alisson, beleza?

Então Alisson eu fiz o q vc me falou e está aparecendo a seguinte exception msg

Exception Description: [class br.icmc.usp.dominio.modelo.Aluno] uses a non-entity [class br.icmc.usp.dominio.modelo.JoinedAlunoDisciplina] as target entity in the relationship attribute [field listaDisciplinas].

Será que teria como vc’s Alisson e wbdsjunior ou alguém me dar uma ajuda?

[]'s.

ricardocomp

Eu me esqueci de trocar o @Embeddable por @Entinty na classe JoinedAlunoDisciplina, mas agora está aparecendo a seguinte mensagem

Exception Description: The reference column name [id] mapped on the element [field disciplina] does not correspond to a valid field on the mapping reference.

Será que teria como vc’s Alisson e wbdsjunior ou alguém me dar uma ajuda?

[]'s.

igor_ks

Pq nota tem que ficar no relacionamento e nao na tabela aluno?

ricardocomp

Alisson para q serve o atributo joinedAlunoDisciplinaPK da classe JoinedAlunoDisciplina?

@Entity
public class JoinedAlunoDisciplina implements Serializable {
...
@EmbeddedId  
private JoinedAlunoDisciplinaPk joinedAlunoDisciplinaPK;
...
}

[]'s.

ricardocomp

Alisson qdo vc fez o referencedColumnName = “id” qual coluna com o nome “id” vc está referenciando?

@JoinColumn(name = "id_aluno", referencedColumnName = "id", insertable = false, updatable = false)

[]'s.

ricardocomp

Falaaa Alisson, me dá uma mão aí rapaiz :smiley:

Até agora não consegui resolver ainda.

[]'s.

Criado 23 de setembro de 2011
Ultima resposta 23 de set. de 2011
Respostas 9
Participantes 4