Quantcast
Channel: Programação - GUJ
Viewing all articles
Browse latest Browse all 33093

Illegal attempt to associate a collection with two open sessions

$
0
0

@rafaelmaps escreveu:

Olá desenvovledores, estou com problema de duas sessões abertas no hibernate. No entanto não consigo descobrir onde tais sessões estão abertas.

Encontrei alguns tópicos na web com o msmo problema só que a maioria estava sem respostas, as que foram respondidas não foram o suficiente pra mim. O erro é título do problema. Acredito que tenha algo a ver com relacionamento N : N. Segue uns códigos:

Fornecedor - Model

@Entity
@SequenceGenerator(name = "FORNEC_SEQUENCE", sequenceName = "FORNEC_SEQUENCE",
        allocationSize = 1, initialValue = 0)
@Table(name = "fornecedor")
public class Fornecedor implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FORNEC_SEQUENCE")
    private Long id;

    @Column(name = "razao_social", nullable = false)
    private String razaoSocial;

    @Column(name = "nome_fantasia", nullable = false)
    private String nomeFantasia;

    @Column(name = "end_logradouro", nullable = false)
    private String logradouro;

    @Column(name = "end_numero", nullable = false)
    private String log_numero;

    @Column(name = "bairro", nullable = false)
    private String bairro;

    @Column(name = "cep", nullable = false)
    private String cep;

    @ManyToOne
    @JoinColumn(name = "id_cidade", nullable = false)
    private Cidade cidade;

    @ManyToOne
    @JoinColumn(name = "tipo_pessoa", nullable = false)
    private TipoPessoa tipoPessoa;

    @Column(name = "cpf_cnpj", nullable = false, unique = true)
    private String cpfCnpj;

    @Column(name = "insc_estadual", nullable = false, unique = true)
    private String inscEstadual;

    @Column(name = "insc_municipal")
    private String inscMunicipal;

    @Column(name = "telefone", length = 13)
    private String telefone;

    @Column(name = "celular", length = 14)
    private String celular;

    @Column(name = "email")
    private String email;

    @ManyToMany(mappedBy = "fornecedores")
    private List<Produto> produtos; // <- detalhe pra esse relacionamento **********

    @ManyToOne
    @JoinColumn(name = "usuario")
    private Usuario usuario;

Produto - Model:

@Entity
@SequenceGenerator(name = "PRODUTO_SEQUENCE", sequenceName = "PRODUTO_SEQUENCE",
        allocationSize = 1, initialValue = 0)
@Table(name = "produto")
public class Produto implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PRODUTO_SEQUENCE")
    private Long id;

    @Column(name = "codigo", unique = true, nullable = false)
    private Long codigo;

    @Column(name = "nome", nullable = false)
    private String nome;

    @Column(name = "principio_ativo", nullable = false)
    private String principioAtivo;

    @Column(name = "unidade_medida", nullable = false, length = 2)
    private String unidadeMedida;

    @Column(name = "quantidade_existente")
    private Integer quantidadeExistente;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "id_produto")
    private List<Preco> precoUnitario;

    @Column(name = "preco_medio")
    private BigDecimal precoMedio;

    @Column(name = "local_armazenado", length = 2)
    private String estoqueLocal;

    @Column(name = "prateleira_armazenado", length = 3)
    private String estoquePrateleira;

    @ManyToMany
    @JoinTable(name = "produto_has_fornecedor", joinColumns = {
        @JoinColumn(name = "produto_id")}, inverseJoinColumns = {
        @JoinColumn(name = "fornecedor_id")})
    private List<Fornecedor> fornecedores;

    @ManyToOne
    @JoinColumn(name = "tipo_produto", nullable = false)
    private TipoProduto tpProduto;

FornecedorDAO:

@Override
public boolean remover(Fornecedor obj) {
    try {
        session = HibernateUtil.getSessionFactory().openSession();
        tx = session.beginTransaction();
        session.delete(obj);
        tx.commit();

        return true;
    } catch (Exception e) {
        tx.rollback();
        System.out.println("catch DAO -> " + e.getMessage());
        e.printStackTrace();
        return false;
    } finally {
        session.close();
    }
}

O erro aparece na hora de excluir um fornecedor.

Grato.

Mensagens: 2

Participantes: 2

Ler tópico completo


Viewing all articles
Browse latest Browse all 33093


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>