2012-12-19 17 views
8

Tüm PlaylistItem-lleri ArtContent -s ile ArtContent kimlik numarasına yönlendiren bir JPQL sorgusu yazmayı deniyorum. Öğeleri, hazırda bulunan çocuk öğelerinin kimlikleriyle nasıl silebilirim?

bu çalıştı:

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; 
} 

ama bir istisna atar:

bağımsız değişken olarak bir dizi alarak hiçbir setParameter yöntem olduğundan, anlaşılabilir Ne
Servlet.service() for servlet RemoveContentServlet threw exception: 
javax.ejb.EJBException: java.lang.IllegalArgumentException: 
Encountered array-valued parameter binding, but was expecting [java.lang.Long] 

. Peki böyle bir sorunu çözmenin en iyi yolu nedir?

Basitleştirilmiş sınıf tanımı:

@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; 
... 
} 

cevap

7

.setParameter ürününü kullanmaya devam edebilirsiniz, ancak değer bir dizi türü kullanmak yerine Koleksiyonu (ArrayList gibi) genişletmeniz gerekir. Belki sadece değiştirin:

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; 
} 
+0

İşte bu kadar! Çok teşekkürler! – Anke

+0

Benim için de iyi çalışıyor, teşekkürler! – kospol

1

yerine setParameterList deneyin.

Düzenleme:

Maalesef JPA bir Collection (Arrays.asList(arrayOfLongs)) dönüştürmek ve sadece setParameter kullanmak için.

Düzenleme 2: Deliğe dayak!

+0

teşekkür ederiz, acaba setParameterList org.hibernate.Query yöntemidir ve burada javax.persistence.Query var. – Anke

+0

Evet, Koleksiyon işi yaptı :) – Anke

İlgili konular