Boa tarde a todos!
Sou novo em programação Java, e estou fazendo uma pequena aplicação web em JSP, utilizando Hibernate e banco de dados PostgreSQL.
Estou com um problema ao gravar os dados inseridos em um Bean de minha aplicação. Já pesquisei muito, e em vários outros fóruns, e não encontrei um caso semelhante ainda.
Dentre os dados das tabelas, vou citar somente os que considerei mais importantes. Preciso gravar os dados em uma tabela “Sessoes” e seus itens, no caso “Solicitacoes” (N:N). Para cada registro de “Solicitacoes”, deverá ser escolhido um de “Agencias” (1:N).
O meu problema é que, depois de inserir todos os dados, e escolher um de “Agencia” para “Soliciticacoes”, ao gravar o registro de “Sessao” (com “session.save(sessoes)”) está gravando novamente o registro de “Agencias”(que eu selecionei de uma lista dentre os já gravados).
Gostaria de saber o que fiz de errado.
Seguem abaixo os trechos de códigos das classes que considerei mais relevantes para este caso:
@Entity
@Table(name="sessoes")
@SuppressWarnings("serial")
public class Sessoes implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.AUTO, generator="id")
@SequenceGenerator(name="id",sequenceName="sessoes_id_seq")
@Column(name="id", nullable=false)
private long id;
@ManyToOne(fetch= FetchType.EAGER)
@JoinColumn(name="id_usuario", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Usuarios usuarios;
@ManyToMany(fetch= FetchType.LAZY)
@JoinTable(name="itens_sessao", joinColumns={@JoinColumn(name="id_sessao")}
, inverseJoinColumns={@JoinColumn(name="id_solicitacao")})
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private List <Solicitacoes> solicitacoes;
}
@Entity
@Table(name = "solicitacoes")
@SuppressWarnings("serial")
public class Solicitacoes implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.AUTO, generator="id")
@SequenceGenerator(name="id",sequenceName="solicitacoes_id_seq")
@Column(name="id", nullable=false)
private long id;
@ManyToOne(fetch= FetchType.EAGER)
@JoinColumn(name="id_pessoa", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private Pessoas pessoas;
@ManyToOne(fetch= FetchType.EAGER)
@JoinColumn(name="id_agencia", insertable=false, updatable=false)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private Agencias agencias;
@ManyToMany(fetch= FetchType.LAZY)
@JoinTable(name="itens_sessao", joinColumns={@JoinColumn(name="id_solicitacao")},
inverseJoinColumns={@JoinColumn(name="id_sessao")})
private List<Sessoes> sessoes;
public List<Sessoes> getSessoes() {
return sessoes;
}
}
@Embeddable
public class ItemSessaoPK implements Serializable {
@ManyToOne(fetch= FetchType.EAGER)
@JoinColumn(name="id_sessao")
@Cascade(CascadeType.ALL)
private Sessoes sessao;
@ManyToOne(fetch= FetchType.EAGER)
@JoinColumn(name="id_solicitacao")
@Cascade(CascadeType.ALL)
private Solicitacoes solicitacao;
}
@Entity
@Table(name="Itens_Sessao")
public class ItensSessao implements Serializable {
@EmbeddedId
private ItemSessaoPK chaveComposta;
public ItemSessaoPK getChaveComposta() {
return chaveComposta;
}
public void setChaveComposta(ItemSessaoPK chaveComposta) {
this.chaveComposta = chaveComposta;
}
}
@Entity
@Table(name = "agencias")
public class Agencias implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.AUTO, generator="id")
@SequenceGenerator(name="id",sequenceName="agencias_id_seq")
@Column(name = "id", nullable = false)
private long id;
@OneToMany(mappedBy = "agencias", fetch= FetchType.LAZY)
@Cascade(CascadeType.SAVE_UPDATE)
private List<Solicitacoes> solicitacoes;
}
Desde já agradeço.
Abraços.