我在 Oracle 数据库中有如下表:
| GROUP | SEQ | OTHER_DATA |
|-------|-----|------------|
| 1 | 1 | ~~~~~~~~~~ |
| 1 | 2 | ~~~~~~~~~~ |
| 1 | 3 | ~~~~~~~~~~ |
| 2 | 1 | ~~~~~~~~~~ |
| 2 | 2 | ~~~~~~~~~~ |
| 2 | 3 | ~~~~~~~~~~ |
whereGROUP是外键,(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);
}
}
但是我不知道如何在持久层中增加序列,而不向MyEntityRepository用于获取最大 seq 值并显式设置它的服务添加逻辑。我不能@GeneratedValue与序列生成器一起使用,因为它会在不考虑组的情况下生成下一个可用值。