Java Hibernate:从IndexColumn集合中删除项的最佳方法

Java Hibernate:从IndexColumn集合中删除项的最佳方法,java,hibernate,Java,Hibernate,有两个表Transaction和TxTargets它们的实体如下所示: Transaction.java: @Entity public class Transaction { @Id @GeneratedValue private Long id; private BigDecimal amount; @OneToMany(cascade= CascadeType.ALL, fetch = FetchType.EAGER) @Cascade(

有两个表
Transaction
TxTargets
它们的实体如下所示:

Transaction.java:

@Entity
public class Transaction {
    @Id
    @GeneratedValue
    private Long id;

    private BigDecimal amount;

    @OneToMany(cascade= CascadeType.ALL, fetch = FetchType.EAGER)
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    @JoinColumn(name = "tx_id")
    @IndexColumn(name="idx")
    private List<TxTargets> txTargets;
}
我需要从集合中删除具有0值的TxTarget对象,其中有多个元素具有相同的tx_id。由于OneToMany关系和@IndexColumn,我无法直接从TxTarget中删除它们

为了了解数据的外观,下面是一个示例:

Transaction:
id|amount|txTargets
1  200    [1,2]
2  100    [3]
3  300    [4,5,6]

TxTargets
id|type|amount|idx|tx_id
1  tp1  200    0   1
2  tp1  0      1   1
3  tp2  100    0   2
4  tp2  150    0   3
5  tp2  0      1   3
6  tp2  150    2   3

TxTargets with ids 2 and 5 are expected to be deleted.
目前,我通过以下方式移除它们:

1) 检索值为0且“having count(tx_id)>1”的所有TxTarget实体的id

2) 从(1)中检索具有TxTargets的所有事务实体

3) 根据(1)中的id列表从集合中删除TxTarget对象

4) 持久化事务实体

这样它可以正常工作,但我认为它缺乏性能(至少有几个集合迭代),并且通常有冗余操作


我想知道有没有更好的方法来删除这些实体,它们是什么?

与OneToMany单向关联已经是一个性能问题。无论如何,我将执行相同的查询来检索实体,但不是选择它们,而是发出批量删除,并在本例中避免持久性上下文
Transaction:
id|amount|txTargets
1  200    [1,2]
2  100    [3]
3  300    [4,5,6]

TxTargets
id|type|amount|idx|tx_id
1  tp1  200    0   1
2  tp1  0      1   1
3  tp2  100    0   2
4  tp2  150    0   3
5  tp2  0      1   3
6  tp2  150    2   3

TxTargets with ids 2 and 5 are expected to be deleted.