为了账号安全,请及时绑定邮箱和手机立即绑定

连接 PersistenceManagerFactory 和 Persistence.xml 时出错

连接 PersistenceManagerFactory 和 Persistence.xml 时出错

交互式爱情 2022-12-28 16:11:10
我的目标是使用 datanucleus,java 中的 h2 数据库进行 CRUD 操作。但卡在连接 PersistenceManagerFactory 和 persistence.xml我尝试过不同版本的 datanucleus-core、h2database、datanucleus-api-jdo。我目前参考的是官方文档:http ://www.datanucleus.org/products/accessplatform/jdo/getting_started.html主代码文件import javax.jdo.JDOHelper;import javax.jdo.PersistenceManager;import javax.jdo.PersistenceManagerFactory;public class Main {    public static void main(String[] args)    {        PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("Tutorial");        PersistenceManager pm = pmf.getPersistenceManager();        pm.currentTransaction().begin();        try {            Users user = new Users();            user.setId(1);            user.setUser("himmat");            user.setEmail("xyz@gmail.com");            user.setMobileNo("7896585687");            pm.currentTransaction().commit();        }finally {            if(pm.currentTransaction().isActive())            {                pm.currentTransaction().rollback();            }            pm.close();        }    }}持久性.xml<?xml version="1.0" encoding="UTF-8" ?><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">    <!-- JDO tutorial "unit" -->    <persistence-unit name="Tutorial">        <class>Users</class>        <exclude-unlisted-classes/>        <properties>            <property name="javax.jdo.option.ConnectionURL" value="jdbc:h2:mem:nucleus1"/>            <property name="javax.jdo.option.ConnectionUserName" value="sa"/>            <property name="javax.jdo.option.ConnectionPassword" value=""/>            <property name="datanucleus.schema.autoCreateAll" value="true"/>        </properties>    </persistence-unit></persistence>
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您可以使用属性而不是 persistence.xml 实际上,我已经使用属性做了一个类似的例子。另一个问题是你可能缺少一些依赖项,我正在共享 pom.xml。尝试使用你可能会得到结果。如果您使用 Maven,这很容易做到。您还需要针对官方文档中显示的内容进行增强。


http://www.datanucleus.org/products/accessplatform/jdo/getting_started.html


为此,您需要遵循


http://www.datanucleus.org/products/accessplatform_3_2/jdo/enhancer.html


POM文件


<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.automated</groupId>

    <artifactId>DemoJDO</artifactId>

    <version>1.0-SNAPSHOT</version>

    <dependencies>

        <dependency>

            <groupId>org.datanucleus</groupId>

            <artifactId>datanucleus-api-jdo</artifactId>

            <version>5.2.1</version>

        </dependency>

        <dependency>

            <groupId>com.h2database</groupId>

            <artifactId>h2</artifactId>

            <version>1.4.199</version>

        </dependency>

        <dependency>

            <groupId>org.datanucleus</groupId>

            <artifactId>datanucleus-rdbms</artifactId>

            <version>5.2.1</version>

        </dependency>

        <dependency>

            <groupId>javax.jdo</groupId>

            <artifactId>jdo-api</artifactId>

            <version>3.1</version>

        </dependency>

        <dependency>

                <groupId>org.datanucleus</groupId>

                <artifactId>datanucleus-core</artifactId>

                <version>5.2.1</version>

        </dependency>

        <dependency>

            <groupId>org.datanucleus</groupId>

            <artifactId>javax.jdo</artifactId>

            <version>3.2.0-m3</version>

        </dependency>


    </dependencies>


    <build>

        <plugins>

            <plugin>

                <groupId>org.datanucleus</groupId>

                <artifactId>datanucleus-maven-plugin</artifactId>

                <version>3.2.0-m3</version>

                <configuration>

                    <log4jConfiguration>${basedir}/log4j.properties</log4jConfiguration>

                    <verbose>true</verbose>

                </configuration>

                <executions>

                    <execution>

                        <phase>process-classes</phase>

                        <goals>

                            <goal>enhance</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

        </plugins>

    </build>


</project>

主文件代码


public static void main(String[] args)

    {

        Properties properties = new Properties();

        properties.setProperty("javax.jdo.PersistenceManagerFactoryClass",

                "org.datanucleus.api.jdo.JDOPersistenceManagerFactory");

        properties.setProperty("javax.jdo.option.ConnectionDriverName","org.h2.Driver");

        properties.setProperty("javax.jdo.option.ConnectionURL","jdbc:h2:~/test");

        properties.setProperty("javax.jdo.option.ConnectionUserName","sa");

        properties.setProperty("javax.jdo.option.ConnectionPassword","");

        properties.setProperty("datanucleus.schema.autoCreateAll","true");


        PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(properties);

        PersistenceManager pm = pmf.getPersistenceManager();


 pm.currentTransaction().begin();

try {

//...

//You can use your logic here

//...

            pm.currentTransaction().commit();

        }finally {

            if(pm.currentTransaction().isActive())

            {

                pm.currentTransaction().rollback();

            }

            pm.close();

        }


}


查看完整回答
反对 回复 2022-12-28
  • 1 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号