У меня есть минимальное весеннее загрузочное приложение, состоящее из 3 классов: Entity, компонента, который пытается заполнить базу данных в @PostConstruct, и класса приложения. Ничего другого.
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
@Component
@Transactional
public class Initializer {
@Autowired
EntityManager em;
@PostConstruct
public void populate() {
em.persist(new MyEntity());
}
}
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int id;
}
Когда я запускаю приложение, я получаю javax.persistence.TransactionRequiredException: нет EntityManager с фактической транзакцией, доступной для текущего потока - не может надежно обработать «постоянный» вызов
Я не единственный, кто когда-либо получал эту ошибку, и я прочитал много постов, но не нашел волшебного решения.
Если я автоматически подключу EntityMananagerFactory и вместо этого сделаю:
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(new MyEntity());
em.getTransaction().commit();
em.close();
Это работает. Вопрос: есть ли более простой способ (разместить правильную аннотацию в нужном месте), чтобы получить EntityManager, который может сохранять сущность? У меня есть веские причины не создавать хранилище (я пытался делать это, и это работает).
С наилучшими пожеланиями, Йенс