У меня есть таблица, подобная следующей в базе данных Oracle:
| GROUP | SEQ | OTHER_DATA |
|-------|-----|------------|
| 1 | 1 | ~~~~~~~~~~ |
| 1 | 2 | ~~~~~~~~~~ |
| 1 | 3 | ~~~~~~~~~~ |
| 2 | 1 | ~~~~~~~~~~ |
| 2 | 2 | ~~~~~~~~~~ |
| 2 | 3 | ~~~~~~~~~~ |
, где GROUP
- это внешний ключ, а (GROUP, SEQ)
- это первичный ключ. Я хочу вставить следующую запись для группы 1, которая должна быть (1, <(MAX SEQ FOR GROUP 1) + 1>, <OTHER DATA>) = (1, 4, <OTHER DATA>)
.
. Я использую Spring Boot 2. Пока у меня есть следующее:
public class MyEntityPK implements Serializable {
private Long group;
private Long seq;
// getters and setters ...
}
@Entity
@Table(name = "MY_TABLE")
@IdClass(MyEntityPK.class)
public class MyEntity {
@Id
private Long group;
@Id
private Long seq;
@ManyToOne
@JoinColumn(name="GROUP", insertable=false, updatable=false)
private Group group;
private String otherData;
// getters and setters ...
}
public interface MyEntityRepository extends CrudRepository<MyEntity, MyEntityPK> {}
Когда я явно установите поле seq
, как в следующем примере, все работает.
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyEntityTest {
@Autowired
MyEntityRepository repository;
@Test
public void testSaveMyEntityWithExplicitParameters() {
MyEntity entity = new MyEntity();
Group group = new Group(1L, "Group description");
entity.setGroup(group);
entity.setSeq(4L);
repository.save(entity);
}
}
Но я не могу понять, как увеличить последовательность в слое постоянства, не добавляя logi c в сервис, который использует MyEntityRepository
, чтобы получить максимальное значение seq и явно установить его. Я не могу использовать @GeneratedValue
с генератором последовательности, потому что он генерирует следующее доступное значение без учета группы.