Добрый день,
Тестовый сервис:
public interface BookService {
Book findById(long id);
Book save(Book book);
}
Spring Data Helper Interface
public interface BookRepository extends CrudRepository<Book, Long> {
}
Реализация BookService:
@Service("bookService")
@Repository
@Transactional
public class JpaBookRepository implements BookService {
@Inject
private BookRepository bookRepository;
@Override
public Book findById(long id) {
return bookRepository.findOne(id);
}
@Override
public Book save(Book book) {
return bookRepository.save(book);
}
}
В тесте создаю Book:
Book book = new BookBuilder()
.title("New Test Book")
.author("Pushkin")
.year(2012)
.price(new BigDecimal(123.2D))
.build();
assertEquals("Book ID is not assigned", 0L, book.getId());
bookService.save( book );
assertNotEquals("Object ID is persistent", 0L, book.getId());
Сохранненный book хочу получить из базы. Для этого надо вызывать entityManager.flush(); entityManager.clear();
Но я не работаю напрямую. Если EntityManager — по аналогии — это коннектор к базе, то использование в тесте чего то типа:
@PersistentContext
private EntityManager entityManager;
Даст мне доступ к entityManager, у которого будет свой PersistentContext, ничего не знающий об managed entity — book.
Какие опции у меня имеются в этом случае? Как лучше сделать, чтобы сохранить в базу и для сверху, получить сохраненную сущность из базы, а не из PersistentContext?