Hibernate: оптимальный способ удаления элементов из коллекции IndexColumn - PullRequest
0 голосов
/ 14 мая 2018

Есть две таблицы 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;
}

TxTargets.java

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

    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private TargetType type;

    private BigDecimal amount;
}

Мне нужно удалить объекты TxTarget с 0 значениями из коллекции, где имеется более одного элемента с одинаковым tx_id.Я не могу удалить их прямо из TxTarget из-за отношения OneToMany и @ IndexColumn.

Чтобы понять, как могут выглядеть данные, вот пример этого:

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) Извлекаем идентификаторы всех сущностей TxTarget с 0 значениями с «имеющим count (tx_id)> 1».

2) Извлекаем все сущности транзакциикоторые имеют TxTargets из (1).

3) Удалить объекты TxTarget из коллекции в соответствии со списком идентификаторов из (1)

4) Персистентная транзакция.

Thisкак это работает правильно, но я думаю, что ему не хватает производительности (по крайней мере, несколько итераций сбора) и в целом есть избыточные действия.

Я хотел бы знать, есть ли лучшие подходы для удаления таких объектов и каковы они

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...