J'obtiens une erreur javax.persistence.EntityNotFoundException lorsque j'essaie d'obtenir l'utilisateur via l'objet de facture
invoice.getUser (). getId ()
javax.persistence.EntityNotFoundException: Unable to find com.indianretailshop.domain.User with id 5
at org.hibernate.ejb.Ejb3Configuration$Ejb3EntityNotFoundDelegate.handleEntityNotFound(Ejb3Configuration.Java:137)
at org.hibernate.proxy.AbstractLazyInitializer.checkTargetState(AbstractLazyInitializer.Java:189)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.Java:178)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.Java:215)
@Entity
@Table(name="users")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false)
private int id;
.
.
.
//bi-directional many-to-one association to Invoice
@OneToMany(mappedBy="user")
private List<Invoice> invoices;
}
@Entity
@Table(name="invoice")
public class Invoice implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false)
private int id;
.
.
.
//bi-directional many-to-one association to User
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="Users_id")
private User user;
}
Le problème peut être que l'entité directe n'existe pas, mais également que l'entité référencée à partir de cette entité, normalement pour un type d'extraction EAGER, ou optionnelle = false.
Essaye ça:
//bi-directional many-to-one association to User
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="Users_id")
private User user = new User();
J'ai eu le même problème, et
@NotFound(action = NotFoundAction.IGNORE)
résolu mon problème.
Si vous utilisez @ManyToOne, l'entité référencée doit exister. La seule autre option consiste à spécifier ce champ en tant que long et à récupérer l'entité référencée au moyen d'une requête distincte.
Lève une exception (javax.persistence.EntityNotFoundException) au lieu de renvoyer null s'il ne peut pas trouver l'entité demandée.
Utilisez l'annotation @NotFound pour résoudre cette exception si vous chargez en différé et ne gérez pas cette exception manuellement.
@ManyToOne(
fetch = FetchType.LAZY)
@NotFound(
action = NotFoundAction.IGNORE)
@JoinColumn(
name = COLUMN,
referencedColumnName = COLUMN,
insertable = false,
updatable = false)
private Table table;
J'ai eu le même problème récemment, mais le problème est que l'enregistrement existe toujours dans DB. J'ai donc fait quelques recherches et découvert qu'à un moment donné, l'entité mise en cache était marquée comme suppression et le rechargement avait échoué avant le rechargement à partir de la base de données. C'est arrivé dans Hibernate 4.3.5
Final pour moi Ensuite, je suis passé à Hibernate 4.3.11
Final, ce qui semble résoudre le problème.
Je ne sais pas si cela s'applique à votre cas.
Mais j'ai eu un problème similaire où j'ai mis à jour directement dans la table de base de données X et défini un champ nul, mais dans la classe Java le champ était @NotNull.
Ainsi, lorsqu'une autre classe Y avait un objet X avec ManyToOne, il était impossible de charger l'entité en raison de la valeur nulle dans l'entité.
s'il vous plaît essayez ce qui suit
@OneToMany(mappedBy="yourMappingattributeName",cascade=CascadeType.ALL)
ou
@OneToMany(mappedBy="yourMappingattributeName",cascade=CascadeType.MERGE)
Utilisez @NotFound (action = NotFoundAction.IGNORE) au cas où son parent n'existe pas
En utilisant cascade = CascadeType.ALL, il supprimera son entité parente