我目前正在使用hibernate作为ORM开发Java EE应用程序。
我正在使用DAO设计模式。我想从联系表中删除一行,但我不知道为什么它不起作用。当我删除société
时,它可以正常工作。
我有société
和contact
之间的关系。当联系人idSociéte=null
时,它将被删除,但如果它存在,则不会删除它。当我在 phpmysadmin 中删除时,即使idSociété not null
也有效。
@Transactional(readOnly = false)
public class GenericDaoImp<T> implements GenericDao<T> {
@PersistenceContext
private EntityManager em;
protected Class<T> daoType;
public GenericDaoImp() {
Type t = getClass().getGenericSuperclass();
ParameterizedType pt = (ParameterizedType) t;
daoType = (Class) pt.getActualTypeArguments()[0];
}
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
public Class<T> getDaoType() {
return daoType;
}
public void setDaoType(Class<T> daoType) {
this.daoType = daoType;
}
public void insert(T t) {
// TODO Auto-generated method stub
em.persist(t);
}
public void update(T t) {
// TODO Auto-generated method stub
em.merge(t);
}
public void delete(T t) {
// TODO Auto-generated method stub
Object managed = em.merge(t);
em.remove(managed);
}
public T findById(Class<T> t, int id) {
// TODO Auto-generated method stub
return em.find(daoType, id);
}
public List<T> findAll() {
// TODO Auto-generated method stub
Query query = em.createQuery("SELECT e FROM " + daoType.getName() + " e");
return (List<T>) query.getResultList();
}
}
package biz.picosoft.entity;
@Entity
@Table(name = "Contacte")
public class Contacte implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idContact")
int idContact;
@Column(name = "nom")
String nom;
@Column(name = "mail")
String mail;
@Column(name = "téléphone")
String téléphone;
@Column(name = "adresse")
String adresse;
@ManyToOne
@JoinColumn(name = "société_id")
private Société société;
public Contacte() {
super();
}
public long getIdContact() {
return idContact;
}
public Contacte(String nom, String mail, String téléphone, String adresse, Société société) {
super();
this.nom = nom;
this.mail = mail;
this.téléphone = téléphone;
this.adresse = adresse;
this.société = société;
}
public Contacte(int idContact, String nom, String mail, String téléphone, String adresse, Société société) {
super();
this.idContact = idContact;
this.nom = nom;
this.mail = mail;
this.téléphone = téléphone;
this.adresse = adresse;
this.société = société;
}
public void setIdContact(int idContact) {
this.idContact = idContact;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public String getTéléphone() {
return téléphone;
}
public void setTéléphone(String téléphone) {
this.téléphone = téléphone;
}
public String getAdresse() {
return adresse;
}
public void setAdresse(String adresse) {
this.adresse = adresse;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (idContact ^ (idContact >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Contacte other = (Contacte) obj;
if (idContact != other.idContact)
return false;
return true;
}
public Société getSociété() {
return société;
}
public void setSociété(Société société) {
this.société = société;
}
}
package biz.picosoft.daoImpl;
@Component
public class ContacteDaoImpl extends GenericDaoImp<Contacte> implements ContacteDao {
}
package biz.picosoft.entity;
import java.io.Serializable;
import java.util.List;
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.OneToMany;
import javax.persistence.Table;
@Entity(name = "société")
@Table(name="société")
public class Société implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idSociété")
int idSociété;
@Column(name = "nom")
String nom;
@Column(name = "email")
String email;
@Column(name = "télèphone")
String télèphone;
@Column(name = "adress")
String adress;
@OneToMany (fetch = FetchType.EAGER,mappedBy = "société", cascade = CascadeType.ALL)
private List<Contacte> contacts;
public Société(String nom, String email, String télèphone, String adress) {
super();
this.nom = nom;
this.email = email;
this.télèphone = télèphone;
this.adress = adress;
}
public Société(int idSociété, String nom, String email, String télèphone, String adress) {
super();
this.idSociété = idSociété;
this.nom = nom;
this.email = email;
this.télèphone = télèphone;
this.adress = adress;
this.contacts = contacts;
}
public Société() {
super();
}
public int getIdSociété() {
return idSociété;
}
public void setIdSociété(int idSociété) {
this.idSociété = idSociété;
}
@Column(name = "nom")
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTélèphone() {
return télèphone;
}
public void setTélèphone(String télèphone) {
this.télèphone = télèphone;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
public List<Contacte> getContacts() {
return contacts;
}
public void setContacts(List<Contacte> contacts) {
this.contacts = contacts;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + idSociété;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Société other = (Société) obj;
if (idSociété != other.idSociété)
return false;
return true;
}
}
答案 0 :(得分:0)
当联系人的idSociéte= null时,它会被删除但是如果它存在的话 不会删除它。
这意味着如果idSociete不为null并且具有某些值,例如。 123.您需要检查是否有任何联系人具有相同的idSociete。如果它与任何其他联系人一起出现,那么您的联系人将不会被删除,因为许多联系人可以与相同的社交关联。尝试单一联系和与之相关的单一社交。