【问题标题】:How delete data from CollectionTable | Hibernate (Jpa) [duplicate]如何从 CollectionTable 中删除数据 |休眠(Jpa)[重复]
【发布时间】:2014-05-28 14:15:25
【问题描述】:

我有 List<String> MyList 的“A”实体:

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

在我为这个“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&lt;A&gt; objectList = em.createQuery("from A_table").getResultList();
-> 我收到错误:
A_Table is not mapped [from A_Table].

所以我决定保持原样:
List&lt;A&gt; 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" 注释:

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

现在我得到这个错误:

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

我该怎么办?

非常感谢!!

【问题讨论】:

标签: java hibernate jpa uielementcollection


【解决方案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 属性,你的映射表不是命名为“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();

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

How to delete data from org.hibernate.collection.PersistentBag? | Hibernate (Jpa)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
相关资源
最近更新 更多