【问题标题】:does not delete with jpql request不使用 jpql 请求删除
【发布时间】: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);那么我会删除它们,但不是我需要的?

标签: java hibernate jpql


【解决方案1】:

你只需要写

query.executeUpdate(); 

之后

query.setParameter("id", id);

【讨论】:

    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 2018-12-24
    • 1970-01-01
    • 2020-04-25
    相关资源
    最近更新 更多