小编Ank*_*nke的帖子

如何在JPA/Hibernate中执行本机SQL脚本?

我有一个带有数据库转储的SQL脚本.如何使用Hibernate执行它EntityManager

我这样试过:

EntityManager manager = getEntityManager(); 
Query q = manager.createNativeQuery(sqlScript);
q.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

但它只在sqlScript包含单个SQL查询时才有效,而我需要运行多个插入和其他复杂的东西.

RDBMS:Oracle Database 11g Express Edition版本11.2.0.2.0 - 64位生产

sql oracle hibernate jpa

38
推荐指数
1
解决办法
4万
查看次数

如何在Hibernate中删除子项的ID-s项?

我正在尝试编写一个JPQL查询,它会删除所有PlaylistItem-s,ArtContent通过ArtContentID 来引用特定的-s .

我试过这个:

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;
}
Run Code Online (Sandbox Code Playgroud)

但它引发了一个例外:

Servlet.service() for servlet RemoveContentServlet threw exception: 
javax.ejb.EJBException: java.lang.IllegalArgumentException: 
Encountered array-valued parameter binding, but was expecting [java.lang.Long]
Run Code Online (Sandbox Code Playgroud)

什么是可以理解的,因为没有setParameter方法将数组作为参数.那么解决这个问题的最佳方法是什么?

简化的类定义:

@Entity
public class PlaylistItem implements Serializable {

@Id
@GeneratedValue
private Long id;

private int position;

@ManyToOne(optional = false)
@JoinColumn(name = "PLAYLIST_ID")
private Playlist …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa jpql

8
推荐指数
1
解决办法
2528
查看次数

标签 统计

hibernate ×2

jpa ×2

jpql ×1

oracle ×1

sql ×1