我有&#34; A&#34; List<String> MyList
的实体:
@Entity(name = "A_table")
@Inheritance(strategy=InheritanceType.JOINED)
public class A implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String RepresentativeName;
@ElementCollection
@CollectionTable(name = "MyList_Table")
private List<String> MyList;
}
在我将值设置为此&#34; A&#34;实体,我想从德比表中删除所有这些数据 但我如何从CollectionTable(MyList_Table)中删除字符串?
我尝试通过HQL查询来实现它,但是我收到了错误。
List<String> strList = em.createQuery("from MyList_Table").getResultList();
...
...
错误:
MyList_Table is not mapped [from MyList_Table]
我应该如何正确地制定查询? 可能有另一种方法可以删除此CollectionTable数据吗?
--------------------------------
的更新
当我使用时:
List<A> objectList = em.createQuery("from A_table").getResultList();
- &GT;我得到了错误:
A_Table is not mapped [from A_Table]
。
所以我决定离开这条线:
List<A> objectList = query.getResultList()
。
但是,如果我试图删除它:
for (A a:objectList)
{
if(....)
{
List<String> Mylist = a.getMyList();
em.getTransaction().begin();
em.remove(Mylist);
em.getTransaction().commit();
}
}
我收到错误:
org.hibernate.MappingException: Unknown entity: org.hibernate.collection.PersistentBag
所以我尝试添加"@IndexColumn
&#34;注释:
.....
@ElementCollection
@CollectionTable(name = "A_Table")
@IndexColumn(name= "indx")
private List<String> MyList;
...
现在我收到了这个错误:
org.hibernate.MappingException: Unknown entity: org.hibernate.collection.PersistentList
我该怎么做?
非常感谢!!
答案 0 :(得分:1)
首先,您必须从父表中恢复元素,即A:
List<A> objectList = em.createQuery("from A").getResultList();
// It would be neccesary to cast the result list
获得结果列表后,您现在可以访问辅助表,并根据需要处理这些数据:
objectList.getMyList().clear();
...
如果它不起作用,您可以使用CriteriaQuery:
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<A> criteriaQuery = criteriaBuilder.createQuery(A.class);
criteriaQuery.from(A.class);
Query query = em.createQuery(criteriaQuery);
List<A> objectList = query.getResultList();
编辑:我注意到你的@Entity注释中有一个name属性,你的映射表没有命名为&#34; A&#34;,但是&#34; A_table&#34;:
List<A> objectList = em.createQuery("from A_table").getResultList();
EDIT2:要删除元素,请尝试逐个删除元素,而不是删除整个列表:
List<String> Mylist = a.getMyList();
em.getTransaction().begin();
for (String element:Mylist){
em.remove(element);
}
em.getTransaction().commit();
<强> ---------------------------
解决方案如下:
How to delete data from org.hibernate.collection.PersistentBag? | Hibernate (Jpa)