【发布时间】:2020-03-19 18:19:05
【问题描述】:
该方法应该通过他的 id 删除一个人的所有广告。它没有给出错误,我不明白如何进行调试以检查错误。
public void deleteAllAdByPersonById(int id) {
EntityManager em = FACTORY.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
Query query = em.createQuery("DELETE FROM Ad a WHERE a.person.id = :id");
query.setParameter("id", id);
transaction.commit();
em.close();
}
人
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "person_id")
private int id;
@NotEmpty
@NotNull(message = "Name cannot be null")
private String name;
@OneToMany(mappedBy = "person", fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
private Set<Ad> ads = new HashSet<>();
广告
@Entity
public class Ad {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ad_id")
private int id;
...
@ManyToOne
@JoinColumn(name = "person_fk_id")
private Person person;
【问题讨论】:
-
你永远不会执行你的
Query。您只需创建它,设置参数...然后结束事务。 -
删除功能不应该是查找和删除所有需要的东西吗?
-
必须执行
Query才能执行某些操作。它不会神奇地执行自己。 -
如果我写 em.remove (query);那么我会删除它们,但不是我需要的?