JPA błąd przy obsłudze Set<> w encji

0

Tworzę użytkowika do autoryzacji w web aplication. Pierwszy raz używam Set w relacjach @manytomany i nie działa, utworzył poprawnie tabele i tabele Grupy_Uzytkownicy.
W debagerze widzę że poprawnie wyszukuje rekord Grupy, dodaje do Set, potem ustawia w obiekcie encji Uzytkownik Grupy HashSet na tablica[0] i rekord encji Grupy.
Daje create, dodaje rekord do Uzytkownicy a do Grupy_Uzytkownicy nie czemu ?

 

tu funkcja dodania rekordu przepisanie danych z DTO i ustawienie dwóch zmiennych encji Uzytkownicy dodatkowo, w tym pola  Grupy ( relacja @manytomany ) 

public void dodajUzytkownika(UzytkownikDTO ObiektUzytkownikaDTO) {
           Uzytkownicy ObiektUzytkownika = new Uzytkownicy();
           ObiektUzytkownikaDTO.setPassword(codePassword(ObiektUzytkownikaDTO.getPassword()));
           przepiszDTODoUzytkonika(ObiektUzytkownikaDTO, ObiektUzytkownika);
           Set<Grupy> Role = new HashSet<Grupy>();
           
           Role.add(GrupyFacade.obiektGrupy("USER")); // zwraca encje grupy USER
  
           ObiektUzytkownika.setGrupy(Role);
           UzytkownicyFacade.create(ObiektUzytkownika);
    }

Uzytkownicy 

package encje;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Set;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author oracle
 */
@Entity
@Table(name = "Uzytkownicy")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Uzytkownicy.findAll", query = "SELECT u FROM Uzytkownicy u"),
    @NamedQuery(name = "Uzytkownicy.findByIdUzytkownika", query = "SELECT u FROM Uzytkownicy u WHERE u.idUzytkownika = :idUzytkownika"),
    @NamedQuery(name = "Uzytkownicy.findByLogin", query = "SELECT u FROM Uzytkownicy u WHERE u.login = :login"),
    @NamedQuery(name = "Uzytkownicy.findByPassword", query = "SELECT u FROM Uzytkownicy u WHERE u.password = :password"),
    @NamedQuery(name = "Uzytkownicy.findBySaldo", query = "SELECT u FROM Uzytkownicy u WHERE u.saldo = :saldo"),
    @NamedQuery(name = "Uzytkownicy.findByAdres", query = "SELECT u FROM Uzytkownicy u WHERE u.adres = :adres"),
    @NamedQuery(name = "Uzytkownicy.findByTelefon", query = "SELECT u FROM Uzytkownicy u WHERE u.telefon = :telefon"),
    @NamedQuery(name = "Uzytkownicy.findByEmail", query = "SELECT u FROM Uzytkownicy u WHERE u.email = :email"),
    @NamedQuery(name = "Uzytkownicy.findByWiek", query = "SELECT u FROM Uzytkownicy u WHERE u.wiek = :wiek")})
public class Uzytkownicy implements Serializable {
    
    private static final long serialVersionUID = 1L;
  
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_uzytkownika")
    private Integer  idUzytkownika;
    
   
    

    public Set<Aukcja> getAukcje() {
        return aukcje;
    }

    public void setAukcje(Set<Aukcja> aukcje) {
        this.aukcje = aukcje;
    }
    
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "login")
    private String login;
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "password")
    private String password;
   
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "saldo")
    private BigDecimal saldo;
    @Size(max = 50)
    @Column(name = "adres")
    private String adres;
    @Size(max = 20)
    @Column(name = "telefon")
    private String telefon;
    // @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation
    @Size(max = 40)
    @Column(name = "email")
    private String email;
    @Column(name = "wiek")
    private Integer wiek;
    
    @ManyToMany(mappedBy="uzytkownicy")
    private Set<Aukcja> aukcje;
     
   @ManyToMany(mappedBy="uzytkownicy")
   private Set<Grupy> grupy;

    public Set<Grupy> getGrupy() {
        return grupy;
    }

    public void setGrupy(Set<Grupy> grupy) {
        this.grupy = grupy;
    }
   
  
    
    public Uzytkownicy() {
    }

    public Uzytkownicy(Integer idUzytkownika) {
        this.idUzytkownika = idUzytkownika;
    }

    public Uzytkownicy(Integer idUzytkownika, String login, String password) {
        this.idUzytkownika = idUzytkownika;
        this.login = login;
        this.password = password;
    }

    public Integer getIdUzytkownika() {
        return idUzytkownika;
    }

    public void setIdUzytkownika(Integer idUzytkownika) {
        this.idUzytkownika = idUzytkownika;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }


    public BigDecimal getSaldo() {
        return saldo;
    }

    public void setSaldo(BigDecimal saldo) {
        this.saldo = saldo;
    }

    public String getAdres() {
        return adres;
    }

    public void setAdres(String adres) {
        this.adres = adres;
    }

    public String getTelefon() {
        return telefon;
    }

    public void setTelefon(String telefon) {
        this.telefon = telefon;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getWiek() {
        return wiek;
    }

    public void setWiek(Integer wiek) {
        this.wiek = wiek;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idUzytkownika != null ? idUzytkownika.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Uzytkownicy)) {
            return false;
        }
        Uzytkownicy other = (Uzytkownicy) object;
        if ((this.idUzytkownika == null && other.idUzytkownika != null) || (this.idUzytkownika != null && !this.idUzytkownika.equals(other.idUzytkownika))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.aukcje.aukcjewebap.encje.Uzytkownicy[ idUzytkownika=" + idUzytkownika + " ]";
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
}



Grupy

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package encje;

import java.io.Serializable;
import java.util.Set;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author oracle
 */
@Entity
@Table(name = "Grupy")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Grupy.findAll", query = "SELECT g FROM Grupy g"),
    @NamedQuery(name = "Grupy.findByIdGrupy", query = "SELECT g FROM Grupy g WHERE g.idGrupy = :idGrupy"),
    @NamedQuery(name = "Grupy.findByNazwaGrupy", query = "SELECT g FROM Grupy g WHERE g.nazwaGrupy = :nazwaGrupy")})
public class Grupy implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_grupy")
    private Integer  idGrupy;
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "nazwa_grupy")
    private String nazwaGrupy;
    
  @ManyToMany
    @JoinTable(
            name = "Grupy_Uzytkownicy",
            joinColumns = @JoinColumn(name = "id_grupy"),
            inverseJoinColumns = @JoinColumn(name = "id_uzytkownika")
    )
    private Set<Uzytkownicy> uzytkownicy;

    public Grupy() {
    }

    public Grupy(Integer idGrupy) {
        this.idGrupy = idGrupy;
    }

    public Grupy(Integer idGrupy, String nazwaGrupy) {
        this.idGrupy = idGrupy;
        this.nazwaGrupy = nazwaGrupy;
    }

    public Integer getIdGrupy() {
        return idGrupy;
    }

    public void setIdGrupy(Integer idGrupy) {
        this.idGrupy = idGrupy;
    }

    public String getNazwaGrupy() {
        return nazwaGrupy;
    }

    public void setNazwaGrupy(String nazwaGrupy) {
        this.nazwaGrupy = nazwaGrupy;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idGrupy != null ? idGrupy.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Grupy)) {
            return false;
        }
        Grupy other = (Grupy) object;
        if ((this.idGrupy == null && other.idGrupy != null) || (this.idGrupy != null && !this.idGrupy.equals(other.idGrupy))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "encje.Grupy[ idGrupy=" + idGrupy + " ]";
    }
    
}

3

Tak na pierwszy rzut oka, brakuje zdefiniowania 'cascade' w tej relacji.

0

to wpływa na to ?

0

to wpływa na to ?

Tak, to wpływa na zapis/edycję/usuwanie (te akcje nie są kaskadowe jeśli nie zdefiniujesz żeby były kaskadowe).

0

nie wiem czy o to chodziło dodał użytkownika tylko reszty czyli do Grupy_Uzytkownicy nie

usunąłem też zbędne komentarze zgodnie z wcześniejszym postem

 

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package encje;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Set;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author oracle
 */
@Entity
@Table(name = "Uzytkownicy")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Uzytkownicy.findAll", query = "SELECT u FROM Uzytkownicy u"),
    @NamedQuery(name = "Uzytkownicy.findByIdUzytkownika", query = "SELECT u FROM Uzytkownicy u WHERE u.idUzytkownika = :idUzytkownika"),
    @NamedQuery(name = "Uzytkownicy.findByLogin", query = "SELECT u FROM Uzytkownicy u WHERE u.login = :login"),
    @NamedQuery(name = "Uzytkownicy.findByPassword", query = "SELECT u FROM Uzytkownicy u WHERE u.password = :password"),
    @NamedQuery(name = "Uzytkownicy.findBySaldo", query = "SELECT u FROM Uzytkownicy u WHERE u.saldo = :saldo"),
    @NamedQuery(name = "Uzytkownicy.findByAdres", query = "SELECT u FROM Uzytkownicy u WHERE u.adres = :adres"),
    @NamedQuery(name = "Uzytkownicy.findByTelefon", query = "SELECT u FROM Uzytkownicy u WHERE u.telefon = :telefon"),
    @NamedQuery(name = "Uzytkownicy.findByEmail", query = "SELECT u FROM Uzytkownicy u WHERE u.email = :email"),
    @NamedQuery(name = "Uzytkownicy.findByWiek", query = "SELECT u FROM Uzytkownicy u WHERE u.wiek = :wiek")})
public class Uzytkownicy implements Serializable {
    
    private static final long serialVersionUID = 1L;
  
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_uzytkownika")
    private Integer  idUzytkownika;
    
   
    

    public Set<Aukcja> getAukcje() {
        return aukcje;
    }

    public void setAukcje(Set<Aukcja> aukcje) {
        this.aukcje = aukcje;
    }
    
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "login")
    private String login;
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "password")
    private String password;
   
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "saldo")
    private BigDecimal saldo;
    @Size(max = 50)
    @Column(name = "adres")
    private String adres;
    @Size(max = 20)
    @Column(name = "telefon")
    private String telefon;
    // @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation
    @Size(max = 40)
    @Column(name = "email")
    private String email;
    @Column(name = "wiek")
    private Integer wiek;
    
    @ManyToMany(mappedBy="uzytkownicy", cascade=CascadeType.ALL)
    private Set<Aukcja> aukcje;
     
   @ManyToMany(mappedBy="uzytkownicy", cascade=CascadeType.ALL)
   private Set<Grupy> grupy;

    public Set<Grupy> getGrupy() {
        return grupy;
    }

    public void setGrupy(Set<Grupy> grupy) {
        this.grupy = grupy;
    }
   
  
    
    public Uzytkownicy() {
    }

    public Uzytkownicy(Integer idUzytkownika) {
        this.idUzytkownika = idUzytkownika;
    }

    public Uzytkownicy(Integer idUzytkownika, String login, String password) {
        this.idUzytkownika = idUzytkownika;
        this.login = login;
        this.password = password;
    }

    public Integer getIdUzytkownika() {
        return idUzytkownika;
    }

    public void setIdUzytkownika(Integer idUzytkownika) {
        this.idUzytkownika = idUzytkownika;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }


    public BigDecimal getSaldo() {
        return saldo;
    }

    public void setSaldo(BigDecimal saldo) {
        this.saldo = saldo;
    }

    public String getAdres() {
        return adres;
    }

    public void setAdres(String adres) {
        this.adres = adres;
    }

    public String getTelefon() {
        return telefon;
    }

    public void setTelefon(String telefon) {
        this.telefon = telefon;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getWiek() {
        return wiek;
    }

    public void setWiek(Integer wiek) {
        this.wiek = wiek;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idUzytkownika != null ? idUzytkownika.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Uzytkownicy)) {
            return false;
        }
        Uzytkownicy other = (Uzytkownicy) object;
        if ((this.idUzytkownika == null && other.idUzytkownika != null) || (this.idUzytkownika != null && !this.idUzytkownika.equals(other.idUzytkownika))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.aukcje.aukcjewebap.encje.Uzytkownicy[ idUzytkownika=" + idUzytkownika + " ]";
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
}



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package encje;

import java.io.Serializable;
import java.util.Set;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author oracle
 */
@Entity
@Table(name = "Grupy")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Grupy.findAll", query = "SELECT g FROM Grupy g"),
    @NamedQuery(name = "Grupy.findByIdGrupy", query = "SELECT g FROM Grupy g WHERE g.idGrupy = :idGrupy"),
    @NamedQuery(name = "Grupy.findByNazwaGrupy", query = "SELECT g FROM Grupy g WHERE g.nazwaGrupy = :nazwaGrupy")})
public class Grupy implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_grupy")
    private Integer  idGrupy;
    
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "nazwa_grupy")
    private String nazwaGrupy;
    
  @ManyToMany(cascade=CascadeType.ALL)
  private Set<Uzytkownicy> uzytkownicy;

    public Grupy() {
    }

    public Grupy(Integer idGrupy) {
        this.idGrupy = idGrupy;
    }

    public Grupy(Integer idGrupy, String nazwaGrupy) {
        this.idGrupy = idGrupy;
        this.nazwaGrupy = nazwaGrupy;
    }

    public Integer getIdGrupy() {
        return idGrupy;
    }

    public void setIdGrupy(Integer idGrupy) {
        this.idGrupy = idGrupy;
    }

    public String getNazwaGrupy() {
        return nazwaGrupy;
    }

    public void setNazwaGrupy(String nazwaGrupy) {
        this.nazwaGrupy = nazwaGrupy;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idGrupy != null ? idGrupy.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Grupy)) {
            return false;
        }
        Grupy other = (Grupy) object;
        if ((this.idGrupy == null && other.idGrupy != null) || (this.idGrupy != null && !this.idGrupy.equals(other.idGrupy))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "encje.Grupy[ idGrupy=" + idGrupy + " ]";
    }
    
}

zapewnie źle coś przypisuję do obiektu encji tylko co w tym Set ???

 

ejb

public void dodajUzytkownika(UzytkownikDTO ObiektUzytkownikaDTO) {
           Uzytkownicy ObiektUzytkownika = new Uzytkownicy();
           ObiektUzytkownikaDTO.setPassword(codePassword(ObiektUzytkownikaDTO.getPassword()));
           przepiszDTODoUzytkonika(ObiektUzytkownikaDTO, ObiektUzytkownika);
           Set<Grupy> Role = new HashSet<Grupy>();
           
           Role.add(GrupyFacade.obiektGrupy("USER"));
  
           ObiektUzytkownika.setGrupy(Role);
           UzytkownicyFacade.create(ObiektUzytkownika);
    }


package model;



import encje.Grupy;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;
/**
 *
 * @author oracle
 */
@Stateless
public class GrupyFacade extends AbstractFacade<Grupy> {
    @PersistenceContext(unitName = "com.aukcje_AukcjeWebAp_war_1.0-SNAPSHOTPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public GrupyFacade() {
        super(Grupy.class);
    }
    
     public Grupy obiektGrupy(String nazwaGrupy) {
        
        return (Grupy) em.createNamedQuery("Grupy.findByNazwaGrupy").setParameter("nazwaGrupy", nazwaGrupy).getSingleResult();
    }
    
    public Grupy obiektGrupy(Integer IdGrupy) {
        
        return (Grupy) em.createNamedQuery("Grupy.findByIdGrupy").setParameter("idGrupy", IdGrupy).getSingleResult();
    }
}


to generuje netbeans


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import java.util.List;
import javax.persistence.EntityManager;

/**
 *
 * @author oracle
 */
public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
        getEntityManager().persist(entity);
    }

    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

    public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }

    public List<T> findRange(int[] range) {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        q.setMaxResults(range[1] - range[0] + 1);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }

    public int count() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
        cq.select(getEntityManager().getCriteriaBuilder().count(rt));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        return ((Long) q.getSingleResult()).intValue();
    }
    
}

to z dump Workbench


CREATE TABLE `Uzytkownicy` (
  `id_uzytkownika` int(11) NOT NULL AUTO_INCREMENT,
  `adres` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `login` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `saldo` decimal(38,0) DEFAULT NULL,
  `telefon` varchar(255) DEFAULT NULL,
  `wiek` int(11) DEFAULT NULL,
  PRIMARY KEY (`id_uzytkownika`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `Uzytkownicy`
--

LOCK TABLES `Uzytkownicy` WRITE;
/*!40000 ALTER TABLE `Uzytkownicy` DISABLE KEYS */;
INSERT INTO `Uzytkownicy` VALUES (1,'Polska','mail','aabcb','7ecfa97a7fc7a6a87a5fab0f1edf7b46006bc716f15e859959721761f3d8e221',NULL,'525-23-786',35);

CREATE TABLE `Grupy_Uzytkownicy` (
  `grupy_id_grupy` int(11) NOT NULL,
  `uzytkownicy_id_uzytkownika` int(11) NOT NULL,
  PRIMARY KEY (`grupy_id_grupy`,`uzytkownicy_id_uzytkownika`),
  KEY `FK_Grupy_Uzytkownicy_uzytkownicy_id_uzytkownika` (`uzytkownicy_id_uzytkownika`),
  CONSTRAINT `FK_Grupy_Uzytkownicy_grupy_id_grupy` FOREIGN KEY (`grupy_id_grupy`) REFERENCES `Grupy` (`id_grupy`),
  CONSTRAINT `FK_Grupy_Uzytkownicy_uzytkownicy_id_uzytkownika` FOREIGN KEY (`uzytkownicy_id_uzytkownika`) REFERENCES `Uzytkownicy` (`id_uzytkownika`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE `Grupy` (
  `id_grupy` int(11) NOT NULL AUTO_INCREMENT,
  `nazwa_grupy` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_grupy`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `Grupy`
--

LOCK TABLES `Grupy` WRITE;
/*!40000 ALTER TABLE `Grupy` DISABLE KEYS */;
INSERT INTO `Grupy` VALUES (1,'ADMIN'),(2,'USER');

Nadal szukam i nie widzę błedu zmieniłem na Set na List też nie dodaje rekordu do Grupy_Uzytkownicy czy zrobiłem jakiś błąd w encji lub nie dodałem czegoś do jakiegoś pliku konfiguracyjnego ?

jak dodaję do encji aukcji rekord poprawnie dodaje rekord do encji aukcje_uzytkownicy połączonych relacją many to many

pole typu Set

w przypadku Grupy_Uzytkownicy nie działa czyli w definicji encji Grupy coś jest nie tak ?

0

błąd był trywialny relacje @ManyToMany są chyba też kierunkowe czyli deklaracja mappedBy powinna być w Grupy gdy rekord dodajemy do Uzytkownicy

dzięki i sory za tony kodu

deklaracja w Grupy

   @ManyToMany(mappedBy="grupy", cascade=CascadeType.ALL)
  private Set<Uzytkownicy> uzytkownicy;


deklaracja w Uzytkownicy

 @ManyToMany(cascade=CascadeType.ALL)
   private Set<Grupy> grupy;

1 użytkowników online, w tym zalogowanych: 0, gości: 1