如何从Hibernate (Jpa)中删除数据



我有"A"实体与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;
}

在我将Values设置为这个"A"实体之后,我想从derby表中删除所有这些数据。
但是我怎么能从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();
->我得到了错误:
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();
   }
}

i get a error:

org.hibernate.MappingException: Unknown entity: org.hibernate.collection.PersistentBag

所以我试着添加"@IndexColumn "注释:

    .....
    @ElementCollection
    @CollectionTable(name = "A_Table")
    @IndexColumn(name= "indx")
    private List<String> MyList;
    ...

现在我得到这个错误:

org.hibernate.MappingException: Unknown entity: org.hibernate.collection.PersistentList

我该怎么做?

非常感谢!

首先,您必须从父表中恢复元素,即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注释中有一个名称属性,你的映射表不命名为"a",而是"A_table":

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();

---------------------------
解决方案在这里:

如何从org.hibernate.collection.PersistentBag中删除数据?| Hibernate (Jpa)

相关内容

  • 没有找到相关文章

最新更新