Seguinte pessoal.
Tenho uma relação ManyToMany, mas estou com um problema, no momento de realizar a criação da tabela (utilizando hibernate), ele está criando quatro FOREIGN KEYs, quando deveria ciar apenas 2
Alguém sabe me dizer o que pode ser?
Codigos.
Tabela Finalidade.
@Entity
public class Finalidade implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo_finalidade;
@ManyToMany
@JoinTable(name = "finalidademensagem", joinColumns = {
@JoinColumn(name = "codigo_finalidade")},
inverseJoinColumns = {
@JoinColumn(name = "codigo_infnfe")})
@Cascade({org.hibernate.annotations.CascadeType.ALL})
private Collection<InfNfe> mensagens;
Get e Set...
}
Tabela InfNfe
[code]
@Entity
public class InfNfe implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo_infnfe;
@Lob
@Column(name = "titulo", nullable = false)
private String titulo;
@Lob
@Column(name = "mensagem", nullable = false)
private String mensagem;
@Column(name = "status", nullable = true)
private boolean status;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "loginestab")
private LoginEstab loginestab;
@ManyToMany
@JoinTable(name = "finalidademensagem", joinColumns = {
@JoinColumn(name = "codigo_infnfe")},
inverseJoinColumns = {
@JoinColumn(name = "codigo_finalidade")})
@Cascade({org.hibernate.annotations.CascadeType.ALL})
private Collection<Finalidade> finalidades;
Get e Set
}[/code]
Tabela FinalidadeMensagemPK
[code]
@Embeddable
public class FinalidadeMensagemPK implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name="codigo_infnfe")
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
private InfNfe codigo_infnfe;
@ManyToOne
@JoinColumn(name="codigo_finalidade")
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
private Finalidade finalidade;
}[/code]
use o mappedBy.
Aqui explica como fazer corretamente o relacionamento: JPA: Mini Livro - Primeiros passos e conceitos detalhados
[quote=Hebert Coelho]use o mappedBy.
Aqui explica como fazer corretamente o relacionamento: JPA: Mini Livro - Primeiros passos e conceitos detalhados[/quote]
Acontece a mesma coisa
Ficaria assim o:
Finalidade
@ManyToMany
@JoinTable(name = "finalidademensagem", joinColumns = @JoinColumn(name = "codigo_finalidade"), inverseJoinColumns = @JoinColumn(name = "codigo_infnfe"))
private List<InfNfe> mensagens;
Mensagens
@ManyToMany(mappedBy = "mensagens")
private List<Finalidade> finalidades;
SQL de criação
CREATE TABLE finalidademensagem
(
codigo_infnfe bigint NOT NULL,
codigo_finalidade bigint NOT NULL,
CONSTRAINT finalidademensagem_pkey PRIMARY KEY (codigo_infnfe , codigo_finalidade ),
CONSTRAINT fk2332af5c4fcd146 FOREIGN KEY (codigo_infnfe)
REFERENCES infnfe (codigo_infnfe) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk2332af5cf862b1f0 FOREIGN KEY (codigo_finalidade)
REFERENCES finalidade (codigo_finalidade) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fkb1948f1c4fcd146 FOREIGN KEY (codigo_infnfe)
REFERENCES infnfe (codigo_infnfe) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fkb1948f1cf862b1f0 FOREIGN KEY (codigo_finalidade)
REFERENCES finalidade (codigo_finalidade) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
Observe no sql acima que ele cria 4 FOREIGN KEYs, quando o certe seria apenas 2. Ou seja, ele duplica as FOREIGNs
Obrigado
[quote=Hebert Coelho]use o mappedBy.
Aqui explica como fazer corretamente o relacionamento: JPA: Mini Livro - Primeiros passos e conceitos detalhados[/quote]
Consegui resolver o problema com a relação ManyToMany com campos adicionais do Mini Livro, não é bem o que eu precisava mas ta funcionando, e é o que importa.

Obrigado, alias… Muito boa as suas explicações!
[quote=gilvanandre][quote=Hebert Coelho]use o mappedBy.
Aqui explica como fazer corretamente o relacionamento: JPA: Mini Livro - Primeiros passos e conceitos detalhados[/quote]
Consegui resolver o problema com a relação ManyToMany com campos adicionais do Mini Livro, não é bem o que eu precisava mas ta funcionando, e é o que importa.

Obrigado, alias… Muito boa as suas explicações!
[/quote]Uia, que bom! Parabéns. [=
Valeu pelo apoio.