gpt4 book ai didi

java - 如何从 CollectionTable 中删除数据 | hibernate (日本)

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:28 25 4
gpt4 key购买 nike

我有“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;
}

在我将值设置为这个“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();
}
}

我收到错误:

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

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

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

关于java - 如何从 CollectionTable 中删除数据 | hibernate (日本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23914149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com