我正在使用JPA接口来Hibernate,我写了一些简单的代码来从数据库中加载实体,然后删除(删除)它。我所有的插入和更新实体的合并调用都可以正常工作,但是当我尝试删除一个实体时,Hibernate不会从数据库中删除它,也不会引发异常。我已经包括以下相关代码:JPA /休眠删除实体不工作
主要方法:
/**
* Accept an invite that was sent to you.
*
* @param inviteId
* @return XML model of the EventMember.
*/
@RequestMapping(value="/invites/accept.rest")
public ModelAndView acceptInvite(@RequestParam final long inviteId) {
final EventInvite invite = eventInviteDAO.find(EventInvite.class, eventInviteId);
EventMember eventMember = new EventMember();
eventMember.setEvent(invite.getEvent());
eventMember.setUser(invite.getUser());
eventMember = eventMemberDAO.store(eventMember);
eventInviteDAO.remove(invite);
return getXMLModelAndView("eventMember", eventMember);
}
AbstractJpaDao类(由所有DAO类继承):
public abstract class AbstractJpaDao<T> implements JpaDao<T> {
abstract public EntityManager getEntityManager();
public <T> T find(Class<T> entityClass, Object primaryKey) {
return getEntityManager().find(entityClass, primaryKey);
}
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED)
public T store(final T objectToPersist) {
T result = getEntityManager().merge(objectToPersist);
return result;
}
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED)
public void remove(final T objectToDelete) {
getEntityManager().remove(objectToDelete);
}
}
EventInvite域类:
@Entity
@Table(name = "TEventInvite")
public class EventInvite implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "EventInviteID", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long eventInviteId;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "EventID", referencedColumnName = "EventID", nullable = false) })
private Event event;
@Column(name = "Email")
@Basic(fetch = FetchType.EAGER)
private String email;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CreateDate", nullable = false)
@Basic(fetch = FetchType.EAGER)
private Calendar createDate;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "UserID", referencedColumnName = "UserID") })
private User user;
public void setEventInviteId(long eventInviteId) {
this.eventInviteId = eventInviteId;
}
public long getEventInviteId() {
return this.eventInviteId;
}
public Event getEvent() {
return event;
}
public void setEvent(Event event) {
this.event = event;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return this.email;
}
public void setCreateDate(Calendar createDate) {
this.createDate = createDate;
}
public Calendar getCreateDate() {
return this.createDate;
}
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((createDate == null) ? 0 : createDate.hashCode());
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result + ((event == null) ? 0 : event.hashCode());
result = prime * result + ((user == null) ? 0 : user.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
EventInvite other = (EventInvite) obj;
if (createDate == null) {
if (other.createDate != null)
return false;
} else if (!createDate.equals(other.createDate))
return false;
if (email == null) {
if (other.email != null)
return false;
} else if (!email.equals(other.email))
return false;
if (event == null) {
if (other.event != null)
return false;
} else if (!event.equals(other.event))
return false;
if (user == null) {
if (other.user != null)
return false;
} else if (!user.equals(other.user))
return false;
return true;
}
}
关于问题可能是什么或如何调试的任何想法?
你的代码是因为你的`AbstractJpaDao`混乱和`eventMemberDAO`实际上不是* DAO * S *,但EntityManager的包装* S(或者,如果你这么将* DaoMgr * s)。如果你在上面的例子中纠正它会很好,因为它不必要地使问题的理解复杂化。 – 2016-11-18 08:38:29