Nano Hash - криптовалюты, майнинг, программирование

JPA без сохранения.xml

Я пытаюсь начать работу с Guice Persist и JPA, который рекомендует использовать конфигурацию через persistence.xml. Исходя из собственного фона Hibernate, где конфигурация была получена программно, есть ли простой способ настроить JpaPersistModule без файла persistence.xml, или всегда должен существовать грубый файл persistence.xml?

Если такой опции не существует, возможно, мне придется поиграть с PersistenceProvider (при условии, что «по умолчанию» каким-то образом анализирует файл persistence.xml). Любые учебные пособия по работе с JPA SPI?


Ответы:


1

Нет необходимости в persistence.xml, если вы используете версию Spring выше 3.1 и уже определили свои классы сущностей.

@Configuration
@ComponentScan(basePackages = { "com.demoJPA.model" })
@EnableTransactionManagement
public class DemoJPAConfig {

    @Bean
    public DataSource dataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("org.gjt.mm.mysql.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/cimto");
        dataSource.setUser("user");
        dataSource.setPassword("pass");

        return dataSource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws PropertyVetoException {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());
        em.setJpaVendorAdapter(vendorAdapter());
        em.setPersistenceUnitName("cimtoPU");
        em.setJpaPropertyMap(getJpaProperties());

        return em;
    }

    public Map<String, ?> getJpaProperties() {
    return new HashMap<String, Object>();
    }

    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);

        return transactionManager;
    }

    public JpaVendorAdapter vendorAdapter() {
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setDatabase(Database.MYSQL);
    vendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect");
        vendorAdapter.setShowSql(true);

        return vendorAdapter;
    }
}

Примечание. Пакет com.demoJPA.model должен содержать ваши классы сущностей.

18.06.2015
  • Дополнительное примечание: может не быть ошибки компиляции, но убедитесь, что Spring поддерживает соответствующую версию спящего режима. Например. Spring 4.2 — первая версия, поддерживающая Hibernate 5.0, Spring 4.3 — первая, поддерживающая Hibernate 5.2. 16.02.2017

  • 2

    Предполагая, что у вас есть реализация PersistenceProvider (например, Hibernate), вы можете использовать PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map) для начальной загрузки EntityManagerFactory без использования persistence.xml.

    Однако раздражает, что вам нужно реализовать интерфейс PersistenceUnitInfo, поэтому вам лучше использовать Spring или Hibernate, которые поддерживают загрузку JPA без файла persistence.xml:

    this.nativeEntityManagerFactory = provider.createContainerEntityManagerFactory(
        this.persistenceUnitInfo, 
        getJpaPropertyMap()
    );
    

    Где PersistenceUnitInfo реализуется Spring -специфический MutablePersistenceUnitInfo< /а> класс.

    18.06.2015

    3

    В зависимости от того, чего вы хотите достичь и в каком контексте (ApplicationServer или CLI, CMT транзакции по сравнению с EntityTransaction), это может быть возможно использовать JPA без persistence.xml. Я сделал это в приложении CLI Java, где у меня были разные базы данных с одинаковой структурой. Для этого я построил EntityManagerFactory вручную.

    PS: файл конфигурации призван облегчить вашу жизнь, поэтому, если можете, просто используйте его.

    18.06.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..