gpt4 book ai didi

java - Spring 中的 Hibernate - 使用子查询进行删除

转载 作者:行者123 更新时间:2023-11-29 23:07:12 25 4
gpt4 key购买 nike

我正在尝试使用 Hibernate 执行删除,但它不起作用......我知道如何使用 SQL 查询来做到这一点,但我想使用 HQL,因为它是 Hibernate。在 sql 中,我的删除查询如下所示:

DELETE FROM timetable WHERE id in(SELECT timetable_id FROM timetable_timetable WHERE timetable < CURDATE())

DELETE FROM timetable_timetable WHERE timetable < CURDATE()

数据库中的这两个表如下所示:

时间表(第一个),timetable_timetable:(第二个):

timetable

timetable_timetable

我的时间表类:(没有 getters、setters 和构造函数的代码)

@Entity
@Table(name = "timetable")
public class Timetable implements Serializable {

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private int id;

@ElementCollection
@LazyCollection(LazyCollectionOption.FALSE)
@JoinColumn(name = "timetable_id")
private List<Date> timetable;

@ManyToOne(cascade= CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name = "movie")
private Movie movie;

@Column(name = "dubbing")
private boolean dubbing;

@Column(name = "subtitles")
private boolean subtitles;

@Column(name = "threeDimensions")
private boolean threeDimensions;
}

我不知道该怎么做。我在互联网上进行了搜索,但没有找到任何有用的东西。我想我会将第一个删除查询分成两个子查询,如下所示:

    Query q = session.createQuery("SELECT id FROM Timetable.timetable WHERE timetable < :today");

SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy");
q.setParameter("today",dateFormatter.format(today));
idToDeleteList = q.list();
String hql = "DELETE FROM timetable WHERE id in :timetable_id";
Query query = session.createQuery(hql);
query.setParameter("timetable_id", idToDeleteList);

但是抛出异常,参数1错误......我将非常感谢您的帮助!

最佳答案

用途:

String hql = "DELETE FROM timetable WHERE timetable < :today";
Query query = session.createQuery(hql);
query.setDate("today", today);
query.executeUpdate();

或者使用 native sql。

关于java - Spring 中的 Hibernate - 使用子查询进行删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28243091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com