【发布时间】:2018-01-09 05:17:24
【问题描述】:
我是休眠新手。我想知道是否发生任何 crud 操作,所以我决定使用 jpa 回调注释。问题是当我运行项目并使用 UI 组件执行删除和添加操作时,没有调用任何 @PrePersist @PostPersist @PreRemove @PostRemove。我使用 primefaces 数据表,因此删除操作绑定到 ManagedBean -> MessageService -> MessageDAO。如果我只执行主文件来测试它,它可以完美运行
MessageDAO:
@Component
public class MessageDAO {
@PersistenceContext
private EntityManager em;
@Transactional
public void register(Message message) {
em.persist(message);
}
@Transactional
public void delete(Integer id) {
Message m = em.find(Message.class, id);
em.remove(em.merge(m));
}
}
消息监听器
public class MessageListener {
@PrePersist
public void prePersist(Message o) {
System.out.println("Pre-Persistiting operation: " );
}
@PostPersist
public void postPersist(Message o) {
System.out.println("Post-Persist operation: " );
}
@PreRemove
public void preRemove(Message o) {
System.out.println("Pre-Removing operation: " );
}
@PostRemove
public void postRemove(Message o) {
System.out.println("Post-Remove operation: " );
}
@PreUpdate
public void preUpdate(Message o) {
System.out.println("Pre-Updating operation: ");
}
@PostUpdate
public void postUpdate(Message o) {
System.out.println("Post-Update operation: " );
}
}
留言
@EntityListeners(MessageListener.class)
@Entity
@Table(name = "messages")
public class Message implements Serializable {
private Integer messageId;
private String subject;
private String content;
public Message(){}
public Message(Integer messageId, String subject, String content) {
this.messageId = messageId;
this.subject = subject;
this.content = content;
}
@Id
@GeneratedValue
@Column(name = "MESSAGE_ID")
public Integer getMessageId() {
return messageId;
}
//getter setter
@PrePersist
public void prePersist() {
System.out.println("OLDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU!!!!!!!!!!!!");
}
}
【问题讨论】:
-
delete方法中的查询是否执行? -
是的,它从数据库中删除记录
-
检查this是否有帮助。