любые аннотации для поля, которое похоже на последовательность, сгенерированную в БД в JAVA - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть сценарий, где есть столбец БД, который должен быть похож на последовательность для каждого первичного ключа + другой столбец.Значение столбца должно снова сброситься и начать с 1 для другого.

Например:

col1 (PK) ------ col2 (FK) ------- my-колонна

0 --------------- 0 ------------------- 1

1 --------------- 0 ------------------- 2

2 --------------- 0 ------------------- 3

3 --------------- 1 ------------------- 1

4 --------------- 1 ------------------- 2

5 --------------- 1 ------------------- 3

Для col1 (PK) я могу просто аннотировать с помощью @GeneratedValue(strategy = GenerationType.IDENTITY)

Таким же образом, я хочу сгенерировать значение для my-column .

Со стороны кода это выглядит так:

classA{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String col2;
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "classa", orphanRemoval = true)
    private List<ClassB> listB = new ArrayList<>();

    //I want to generate/increment the value of myCol each time based on value of col1 & col2
    @Column(name = "my-col")
    private Integer myCol;
//getter/setters
}

ClassB{
    @Id
    @Column(name = "col1")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer col1;

    @ManyToOne
    @JoinColumn(name = "col2")
    private ClassA classa;

//getter/setter
}

1 Ответ

0 голосов
/ 06 февраля 2019

Когда вы добавляете элементы в listB экземпляра classA, просто генерируйте значение для myCol каждый раз и сбрасывайте:

AtomicInteger value = new AtomicInteger(1);
classa.setListB(classa.getListB.stream.map(b->b.setMyCol(value.getAndIncrement())))
...