Bom dia galera o problema eu acho que é simples mas não estou conseguindo eu tenho 2 tabelas
tabela users
username
password
enabled
tabela authorities
authority
fk_username
como eu posso usar um insert para essas duas tabelas, eu ja tinha o método para inserir em uma só tabela, depois que eu botei
Spring security que eu acho exige esse tipo de configuração,eu estou com essa dúvida, vcs podem me ajudar.
Acho que a dúvida dele é que ao persistir na tabela de permissóes a fk_username seja corretamente salva, no caso dele seria um relacionamento ManyToMany, é o mesmo problema que eu tenho para persistir um OneToMany, se instanciar a outra tabela e mandar salvar, a FK não é salva, fica nula.
Isso ainda não ficou claro nas minhas pesquisas no fórum.
justamente que meu amigo Guevara disse, que tinha que fazer outro insert eu sabia desculpe
se eu não fui muito claro tem um dba aki na empresa que falou para usar trigger vou da uma pesquisada.
não sei se é a melhor forma.
Vou colocar o meu caso aqui e a conclusão que vcs chegarem vai ajudar tb ao autor do tópico.
Tenho um relacionamento @OneToMany:
@Entity
public class Contato {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idContato;
private String nome;
private String email;
@OneToMany(targetEntity=Mensagem.class ,cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "contato",orphanRemoval=true)
private List<Mensagem> mensagens = new ArrayList<Mensagem>() ;
public Contato() {
}
public void setIdContato(Long idContato) {
this.idContato = idContato;
}
public Long getIdContato() {
return idContato;
}
public List<Mensagem> getMensagens() {
return mensagens;
}
public void setMensagens(List<Mensagem> mensagens) {
this.mensagens = mensagens;
}
public Contato(Long idContato, String nome, String email,
List<Mensagem> mensagens) {
this.idContato = idContato;
this.nome = nome;
this.email = email;
this.mensagens = mensagens;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
@Entity
public class Mensagem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idMensagem;
private String assunto;
@Column(columnDefinition="text")
private String mensagem;
@ManyToOne
private Contato contato;
public String getAssunto() {
return assunto;
}
public void setAssunto(String assunto) {
this.assunto = assunto;
}
public Mensagem() {
}
public Mensagem(Long idMensagem, String assunto, String mensagem,
Contato contato) {
this.idMensagem = idMensagem;
this.assunto = assunto;
this.mensagem = mensagem;
this.contato = contato;
}
public Long getIdMensagem() {
return idMensagem;
}
public void setIdMensagem(Long idMensagem) {
this.idMensagem = idMensagem;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
public Contato getContato() {
return contato;
}
public void setContato(Contato contato) {
this.contato = contato;
}
}
Pelo exposto acima, temos um contato que pode ter várias mensagens e uma mensagem deve pertencer a um contato.Correto?
Agora, para persistir isso na jsp:
O parâmetro do name não é reconhecido, até pq assunto e mensagem não estão na classe(ou tabela) Contato e sim na Mensagem.
Esse é o problema, como persistir um objeto Contato que pode possuir várias mensagens. Se instanciar a Mensagem, não vai salvar a Id do contato na tabela Mensagem, ficando desta forma:
O mesmo acontece com a dúvida do autor do tópico, embora o relacionamento seja ManyToMany.
Neste link mostra como deve ser feito, só que não serve para persistir via web: http://www.hiberbook.com/HiberBookWeb/learn.jsp?tutorial=18mappingonetomanyassociations
Não percebi se o autor do tópico está em aplicação web ou desktop, se for desktop o link acima pode até ajudar.
Abraço!
éo seguinte como mostrei eu tenho uma pk username e uma fk_username eu queria que quando
inserisse na tabela o username fosse inserindo tambem o fk_username.
assim que esta na documentação do spring security da até para fazer com uma tabela mas não fica bom
e por fimassociar a mensagem ao seu contato e vice-versa.
3o numa associaçao bi-direcional vc deve setar o atributo mappedby no lado fraco da relaçao
@dcorteztec man vc pode fazer isso por uma trigger como citou ou entao como ja foi dito fazer um simples insert na outra tabela, onde esta a dificuldade?
Oi renanreismartins!
Eu me referia a forma de gravar os dados, enquanto na web usamos tags, no desktop fazemos isso da forma como está no link, o meu problema era passar a idéia de persistência no desktop para a web usando o .
Finalmente consegui resolver a questão, a dica é alterar o Controller e o DAO tb, além de deixar o form para persistir o objeto em questão, sem associação ao outro.
Abraço!