私のユニットテストでは、いくつかのエンティティを永続化し、それらのデータベースからの検索をテストしたいと思います。彼らは救われていませんでした。テストメソッドに@Transaction
という注釈が付いていた場合、メソッドがエラーなく終了しても、その内部で起こったことはすべて保持されませんでした。@Transaction注釈付きメソッドはデータをデータベースに保存しません
多対多の遅延ロードされた関連付けを混乱させ、@Transaction
というメソッドで注釈を付けると、問題が解決されたように見えたので、私はそれを使用しています。
エンティティが保存されない理由は何でしょうか?トランザクションが失敗しないため、トランザクションをロールバックする理由はありません。関連するクラスの
コード:
@Test
@Transactional
public void plainPersistence() throws NullParameterException {
User user = userHelper.createUser("User1", "password", null, null);
Assert.assertNotNull(userDAO.findByUsername("User1"));
}
userHelper:
@Service
public class UserHelper {
@Autowired
private UserDAO userDAO;
public User createUser(...) throws NullParameterException {
User newUser = new User(username, ...);
userDAO.save(newUser);
return newUser;
}
UserDAOのsave()
方法は、その後に呼び出したsave()
UserRepository
上:あなたは可能性が高いですので
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
public User findByUsername(String username);
}
おかげでクラスに注釈を付ける春< 4.2
使用している場合は、これを変更するには、とあなたのテストクラスに注釈を付ける必要があります。今は例外が発生していますが、org.springframework.transaction.TransactionSystemException:JPAトランザクションをコミットできませんでした。入れ子にされた例外はjavax.persistence.RollbackExceptionです:トランザクションはrollbackOnly'としてマークされていますが、それは私が考えている進歩です –
これは、ロジック自体で起こっている本当の例外によるものです。これを理解する必要があります –