我需要运行以下代码。 但是,孩子不是为父实体'Erfasser'创建的。 如果我注释掉这行erfasser.getErfasst()。add(neu),一切正常。JPA实体未存储OneToMany关系
@PostConstruct
public void init() {
Erfasser erfasser = new Erfasser();
erfasser.setEmail("[email protected]");
erfasser.setPasswort("counting88");
gesamtAnzahl.einfuegenErfasser(erfasser);
Erfasst neu = new Erfasst();
neu.setDatum(new Date());
neu.setJuristische(1);
neu.setNatuerliche(0);
gesamtAnzahl.einfuegen(neu);
erfasser.getErfasst().add(neu);
gesamtAnzahl.update(erfasser);
}
只有Erfasser本身被正确地存储在数据库中。
@Entity
public class Erfasser implements Serializable {
private static final long serialVersionUID = 1L;
public Erfasser() {
super();
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int erfasser_id;
@Column(length = 50)
@Email(message = "Inkorrekt EMail")
private String email;
@Column(length = 30)
private String passwort;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(referencedColumnName = "erfasser_id", name = "erfasst_id_referenz")
private List<Erfasst> erfasst;
public int getErfasser_id() {
return erfasser_id;
}
public void setErfasser_id(int erfasser_id) {
this.erfasser_id = erfasser_id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPasswort() {
return passwort;
}
public void setPasswort(String passwort) {
this.passwort = passwort;
}
public List<Erfasst> getErfasst() {
return erfasst;
}
public void setErfasst(List<Erfasst> erfasst) {
this.erfasst = erfasst;
}
}
在这里,我SessionBeans:
AnzahlErfasstGesamtLocal.java
@Local
public interface AnzahlErfasstGesamtLocal {
public abstract List<Integer> gesamt();
public abstract List<Erfasst> gesamtNatuerlich();
public abstract List<Erfasst> gesamtJuristisch();
public abstract void einfuegenErfasser(Erfasser e);
public abstract void einfuegen(Erfasst e);
public abstract void update(Erfasser e);
public abstract void loeschen(Erfasst e);
}
AnzahlErfasstGesamt.java
@Stateless
@LocalBean
public class AnzahlErfasstGesamt implements AnzahlErfasstGesamtLocal {
@PersistenceContext
private EntityManager em;
public AnzahlErfasstGesamt() {
}
@Override
public List<Integer> gesamt() {
return null;
}
@Override
public List<Erfasst> gesamtNatuerlich() {
try {
TypedQuery<Erfasst> q = em.createQuery(
"SELECT COUNT(e) FROM Erfasst e WHERE e.natuerliche = 1 AND e.juristische = 0; ", Erfasst.class);
List<Erfasst> liste = q.getResultList();
if (!liste.isEmpty()) {
return liste;
} else {
return null;
}
} catch (NoResultException e) {
return null;
}
}
@Override
public List<Erfasst> gesamtJuristisch() {
try {
TypedQuery<Erfasst> q = em.createQuery(
"SELECT COUNT(e) FROM Erfasst e WHERE e.juristische = 1 AND e.natuerliche = 0; ", Erfasst.class);
List<Erfasst> liste = q.getResultList();
if (!liste.isEmpty()) {
return liste;
} else {
return null;
}
} catch (NoResultException e) {
return null;
}
}
@Override
public void einfuegen(Erfasst e) {
em.persist(e);
}
@Override
public void update(Erfasser e) {
em.merge(e);
}
@Override
public void loeschen(Erfasst e) {
em.remove(em.merge(e));
}
@Override
public void einfuegenErfasser(Erfasser e) {
em.persist(e);
}
}
更多信息请询问。编辑问题,添加实体更新方法的源代码 –
什么是“gesamtAnzahl”?服务? – jklee
@jklee - 编辑我的代码 - 没有它的我的SessionBean –