我在一項測驗中遇到問題,檢查具有屬性版本(用 注釋@Version)的物體在更新后是否遞增。
- 如果我使用注釋
@SpringBootTest,則版本會增加。 - 如果我使用
@DataJpaTest,則版本不會增加。
您知道如何配置@DataJpaTest以使增量作業嗎?
請在下面找到作業測驗:
@SpringBootTest
public class TestAuditing extends TestCrud<AuditingEntity> {
...
@Test
@Override
void update() {
Long version = entity.getVersion();
super.update();
assertEquals( version, entity.getVersion());
}
}
這是不作業的測驗:
@ExtendWith(SpringExtension.class)
@DataJpaTest
public class TestAuditing extends TestCrud<AuditingEntity> {
...
@Test
@Override
void update() {
Long version = entity.getVersion();
super.update();
assertEquals( version, entity.getVersion());
}
}
這是TestCrud抽象類的代碼
public abstract class TestCrud<E extends AbstractEntity> {
protected static AbstractEntity entity;
...
@Test
void update() {
E updatedEntity = crudAdapter.update((E) entity);
assertEquals(updatedEntity.getId(), entity.getId());
entity = updatedEntity;
}
...
提前感謝您的回答!
uj5u.com熱心網友回復:
我無法給出明確的答案,因為您沒有發布實際上應該做任何事情的代碼。但是問題的可能原因是DataJpaTest包含@Transactioanl注釋,從而將事務邊界從存盤庫方法的入口和出口移動,我假設您在某個地方使用到測驗方法。由于 JPA 在事務結束之前不會重繪 更改,因此您不會獲得版本增量。
對于像您這樣取決于交易的確切范圍的測驗,我建議使用 a TransactionTemplate,以便您可以精確控制您的交易。您還可以使用 SQL 日志記錄來確保 SQL 陳述句在您認為它們被執行時得到執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/473256.html
