Hibernate : org.mise en veille prolongée.loader.MultipleBagFetchException: impossible d'extraire simultanément plusieurs sacs
Les classes d'entité
Client
@Entity
@Table(name="Custumer")
public class Custumer implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Long id;
@Column(name="name",unique = true)
private String name;
@Column(name="Email",unique = true)
private String Email;
@Column(name = "Coins")
private Double coins;
@ManyToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
private List<ShippingAdress> shippingAdress = new ArrayList<ShippingAdress>();
@OneToMany( fetch = FetchType.EAGER, mappedBy = "custumer", cascade = CascadeType.ALL,orphanRemoval = true)
private List<Order> orders= new LinkedList<Order>();
//...
ShippingAdress
@Entity
@Table(name="ShippingAdress")
public class ShippingAdress implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Long id;
@Column(name="postCode")
private String PostCode;
@Column(name="street")
private String street;
@Column(name="house")
private String house;
@Column(name="flat")
private String flat;
@ManyToMany(mappedBy = "shippingAdress")
private List<Custumer> custumers = new LinkedList<Custumer>();
//...
Éléments
@Entity
@Table(name="Items")
public class Items implements Serializable,Comparable<Items> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Long id;
@Column(name="name", unique = true)
private String name;
@Column(name="price")
private double price;
@Column(name="count")
private int count;
@OneToMany(mappedBy = "item", cascade = CascadeType.ALL,orphanRemoval = true)
List<Order> orders = new LinkedList<Order>();
//...
CustomerOrder
@Entity
@Table(name = "CustumerOrder")
public class Order implements Serializable {
@Id
@ManyToOne
private Custumer custumer;
@Id
@ManyToOne
private Items item;
Quand j'essaye de mettre toute commande d'un client particulier
public List<Order> getOrderByCustumerId(Custumer custumer) {
Criteria criteria = session.createCriteria(Order.class);
List<Order> res = (List<Order>) criteria.add(Restrictions.eq("custumer",custumer)).list();
return res;
}
Je suis confronté à l'exception suivante:
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
Si supprimer fetch = FetchType.EAGER
de l'un des endroits qu'ils existaient
obtenir le suivant:
(censé supprimé de la clientèle )
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: org.CoinsShop.DataBase.DataSets.Custumer.shippingAdress, could not initialize proxy - no Session
relations en DB
Jetez un oeil à ce post stackoverflow.com/questions/17566304/...
OriginalL'auteur ketchyn | 2016-05-17
Vous devez vous connecter pour publier un commentaire.
Comme une exception vous dit, vous ne pouvez pas récupérer deux liés à des collections ou des sacs simultanément. Une solution rapide serait de retirer le
FetchType.EAGER
d'une collection et de la force de l'extraction de la collection appelant explicitement les objets de collection.Par exemple, si vous supprimez le
FetchType.EAGER
deshippingAddress
collection, vous pouvez forcer l'extraction comme ceci:L'appel de la
size()
méthode de la collection de la force de la récupération de tous les éléments de cette collection.Plus d'informations sur ce sujet:
Hibernate ne peut pas simultanément extraire plusieurs sacs
OriginalL'auteur JMSilla