Hibernate 6.5 JPA Bootstrap With Derby Database

首先系统中引入依赖项

        Gradle方式

 implementation group: 'org.apache.derby', name: 'derby', version: '10.17.1.0'
 implementation group: 'org.hibernate.orm', name: 'hibernate-core', version: '6.5.2.Final'

        Maven方式

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <version>10.17.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.hibernate.orm</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>6.5.2.Final</version>
</dependency>

创建jakarta.persistence.spi.PersistenceProvider持久化提供者实例,本例子是Hibernate所以手动方式创建HibernatePersistenceProvider,创建该对象后通过

createContainerEntityManagerFactory(PersistenceUnitInfo info, Map properties)
方法是通过手动创建PersistenceUnitInfo实例
或
createEntityManagerFactory(String persistenceUnitName, Map properties)
方法是通过XML配置方式META-INF/persistence.xml

例子:


    @Test
    void testJPABootstarp() {
        String userHome = System.getProperty("user.home");
        System.setProperty("derby.client.traceDirectory", userHome);
        System.setProperty("derby.system.home", userHome);
        HibernatePersistenceProvider persistenceProvider = new HibernatePersistenceProvider();
        EntityManagerFactory leftfootEntityManagerFactory = persistenceProvider.createContainerEntityManagerFactory(new PersistenceUnitInfo() {
            @Override
            public String getPersistenceUnitName() {
                return "leftfootPersistenceUnitName";
            }

            @Override
            public String getPersistenceProviderClassName() {
                return HibernatePersistenceProvider.class.getName();
            }

            @Override
            public PersistenceUnitTransactionType getTransactionType() {
                return PersistenceUnitTransactionType.RESOURCE_LOCAL;
            }

            @Override
            public DataSource getJtaDataSource() {
                return null;
            }

            @Override
            public DataSource getNonJtaDataSource() {
                return null;
            }

            @Override
            public List<String> getMappingFileNames() {
                return List.of();
            }

            @Override
            public List<URL> getJarFileUrls() {
                return List.of();
            }

            @Override
            public URL getPersistenceUnitRootUrl() {
                return null;
            }

            @Override
            public List<String> getManagedClassNames() {
                return List.of(PdfMarker.class.getName());
            }

            @Override
            public boolean excludeUnlistedClasses() {
                return false;
            }

            @Override
            public SharedCacheMode getSharedCacheMode() {
                return SharedCacheMode.NONE;
            }

            @Override
            public ValidationMode getValidationMode() {
                return ValidationMode.NONE;
            }

            @Override
            public Properties getProperties() {
                return new Properties();
            }

            @Override
            public String getPersistenceXMLSchemaVersion() {
                return "";
            }

            @Override
            public ClassLoader getClassLoader() {
                return null;
            }

            @Override
            public void addTransformer(ClassTransformer transformer) {

            }

            @Override
            public ClassLoader getNewTempClassLoader() {
                return null;
            }
        }, new HashMap<>() {
            {
                this.put(AvailableSettings.JAKARTA_JDBC_DRIVER, AutoloadedDriver.class.getName());
                this.put(AvailableSettings.JAKARTA_JDBC_URL, "jdbc:derby:" + userHome + File.separator + "leftfootTest;create=true");
                this.put(AvailableSettings.JAKARTA_JDBC_USER, "leftfoot");
                this.put(AvailableSettings.AUTOCOMMIT, "true");
                this.put(AvailableSettings.SHOW_SQL, "true");
                this.put(AvailableSettings.DIALECT, DerbyDialect.class.getName());
                this.put(AvailableSettings.HBM2DDL_AUTO, "update");
            }
        });
        try (EntityManager entityManager = leftfootEntityManagerFactory.createEntityManager()) {
            PdfMarker pdfMarker = new PdfMarker("seq123_1234");
            pdfMarker.setDbId(DbIdGenerator.generateId());
            entityManager.persist(pdfMarker);
        }
        leftfootEntityManagerFactory.close();
    }
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">
    <persistence-unit name="leftfoot">
        <description>
            Persistence unit for Hibernate User Guide
        </description>
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>com.leftfoot.PdfMarker</class>
        <properties>
            <property name="jakarta.persistence.jdbc.driver" value="org.apache.derby.iapi.jdbc.AutoloadedDriver"/>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:derby:C:/Users/Administrator/leftfootTest;create=true"/>
            <property name="jakarta.persistence.jdbc.user" value="sa"/>
            <property name="jakarta.persistence.jdbc.password"  value=""/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto"  value="update"/>
        </properties>
    </persistence-unit>
</persistence>
    @Test
    void testJPABootstarpPersistenceUnit() {
        HibernatePersistenceProvider hibernatePersistenceProvider = new HibernatePersistenceProvider();
        EntityManagerFactory entityManagerFactory = hibernatePersistenceProvider.createEntityManagerFactory("leftfoot", new HashMap<>());
        try (EntityManager entityManager = entityManagerFactory.createEntityManager()) {
            entityManager.getTransaction().begin();
            PdfMarker pdfMarker = new PdfMarker("seq123_4567");
            pdfMarker.setDbId(DbIdGenerator.generateId());
            entityManager.persist(pdfMarker);
            entityManager.getTransaction().commit();
        }
        entityManagerFactory.close();
    }

得到EntityManager实例后就可以对数据库进行操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

victorkevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值