gpt4 book ai didi

hibernate - 如何通过 Hibernate 中子项的 ID-s 删除项?

转载 作者:行者123 更新时间:2023-12-04 07:40:38 26 4
gpt4 key购买 nike

我正在尝试编写一个 JPQL 查询来删除所有 PlaylistItem -s 指的是特定的 ArtContent -s 来自 ArtContent身份证件。

我试过这个:

public int deleteItemsByContentIds(Long[] contentIds) {
EntityManager em = getEntityManager();
int result = em.createQuery(
"delete from PlaylistItem where artContent.id in (:idsArray) ")
.setParameter("idsArray", contentIds).executeUpdate();

return result;
}

但它抛出一个异常:
Servlet.service() for servlet RemoveContentServlet threw exception: 
javax.ejb.EJBException: java.lang.IllegalArgumentException:
Encountered array-valued parameter binding, but was expecting [java.lang.Long]

什么可以理解,因为没有 setParameter以数组为参数的方法。那么解决此类问题的最佳方法是什么?

简化的类定义:
@Entity
public class PlaylistItem implements Serializable {

@Id
@GeneratedValue
private Long id;

private int position;

@ManyToOne(optional = false)
@JoinColumn(name = "PLAYLIST_ID")
private Playlist playlist;

@ManyToOne(optional = false)
@JoinColumn(name = "ART_CONTENT_ID")
private ArtContent artContent;

...

}
@Entity
public class ArtContent implements Serializable {

@Id
@GeneratedValue
private Long id;
...
}

最佳答案

您可以继续使用 .setParameter但是您需要使该值扩展集合(如 ArrayList)而不是使用数组类型。也许只是改为:

public int deleteItemsByContentIds(Long[] contentIds) {
EntityManager em = getEntityManager();
int result = em.createQuery(
"delete from PlaylistItem where artContent.id in (:idsArray) ")
.setParameter("idsArray", Arrays.asList(contentIds)).executeUpdate();

return result;
}

关于hibernate - 如何通过 Hibernate 中子项的 ID-s 删除项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954478/

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