Eclipselink 3.0没有找到合适的JDBC(Jakarta EE)

发布于 2025-01-29 05:18:56 字数 3248 浏览 2 评论 0原文

我正在尝试运行一个简单的Web应用程序,我希望在该应用程序上运行雅加达EE 9.1(完整平台)上的一些测试。我将应用程序部署在玻璃鱼6.2.5上。当我运行一些使用JPA实现的代码时,此例外是抛出的(持久性提供者是Eclipselink 3.0.2):

jakarta.persistence.persistenceException:异常[eclipselink-4002] (Eclipse持久服务-3.0.2.v202107160933): org.eclipse.persistence.exceptions.databaseexception内部 例外:java.sql.sqlexception:找不到合适的驱动程序 JDBC:mysql:// localhost:3306; create = true错误代码:0

persistence.xml是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
             version="3.0">
    <persistence-unit name="GestoreDB" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>testJPA.ValueBeen</class>
        <properties>
            <property name="jakarta.persistence.schema-generation.action" value="drop-and-create"/>
            <property name="jakarta.persistence.schema-generation.scripts.create-target" value="database-and-scripts"/>
            <property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306;create=true"/>
            <property name="jakarta.persistence.jdbc.user" value="root"/>
            <property name="jakarta.persistence.jdbc.password" value="myPwd"/>
        </properties>
    </persistence-unit>
</persistence>

实体是(省略getters and steters):

@Entity
@NamedQuery(name = "ValueBeen.selectTable", query = "select u from ValueBeen u")
public class ValueBeen
{
    public ValueBeen(){
    }
    
    public ValueBeen(String value)
    {
        this.value = value;
    }
    
    public ValueBeen(int id, String value)
    {
        this.id = id;
        this.value = value;
    }
    
    @Id
    @GeneratedValue
    private int id;
    @NotNull
    private String value;
...
}

执行持久性的webServlet是:

@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        
        ValueBeen valueBeen=new ValueBeen("Hello");
        
        
        //Manager persistence and manager been
        EntityManagerFactory managerPersistence = Persistence.createEntityManagerFactory("GestoreDB");
        EntityManager entityManager = managerPersistence.createEntityManager();
        
        //Do persistence
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        entityManager.persist(valueBeen);
        transaction.commit();
        
        //close managers
        entityManager.close();
        managerPersistence.close();
    }
}

我放置JDBC Connector jar(mysql Connector jar) 8.0.28)in。\ glassfish-6.2.5 \ glassfish \ domains \ domain1 \ lib

I'm trying to run a simple web application on which I want run some tests on Jakarta EE 9.1(Full platform). I deployed my application on Glassfish 6.2.5. While I was running some code with jpa implementation this exception is thrown(the persistence provider is EclipseLink 3.0.2):

jakarta.persistence.PersistenceException: Exception [EclipseLink-4002]
(Eclipse Persistence Services - 3.0.2.v202107160933):
org.eclipse.persistence.exceptions.DatabaseException Internal
Exception: java.sql.SQLException: No suitable driver found for
jdbc:mysql://localhost:3306;create=true Error Code: 0

The persistence.xml is:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
             version="3.0">
    <persistence-unit name="GestoreDB" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>testJPA.ValueBeen</class>
        <properties>
            <property name="jakarta.persistence.schema-generation.action" value="drop-and-create"/>
            <property name="jakarta.persistence.schema-generation.scripts.create-target" value="database-and-scripts"/>
            <property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306;create=true"/>
            <property name="jakarta.persistence.jdbc.user" value="root"/>
            <property name="jakarta.persistence.jdbc.password" value="myPwd"/>
        </properties>
    </persistence-unit>
</persistence>

The Entity is(getters and setters omitted):

@Entity
@NamedQuery(name = "ValueBeen.selectTable", query = "select u from ValueBeen u")
public class ValueBeen
{
    public ValueBeen(){
    }
    
    public ValueBeen(String value)
    {
        this.value = value;
    }
    
    public ValueBeen(int id, String value)
    {
        this.id = id;
        this.value = value;
    }
    
    @Id
    @GeneratedValue
    private int id;
    @NotNull
    private String value;
...
}

And the WebServlet who perform persistency is:

@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        
        ValueBeen valueBeen=new ValueBeen("Hello");
        
        
        //Manager persistence and manager been
        EntityManagerFactory managerPersistence = Persistence.createEntityManagerFactory("GestoreDB");
        EntityManager entityManager = managerPersistence.createEntityManager();
        
        //Do persistence
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        entityManager.persist(valueBeen);
        transaction.commit();
        
        //close managers
        entityManager.close();
        managerPersistence.close();
    }
}

I put the jdbc connector jar (Mysql connector 8.0.28) in .\glassfish-6.2.5\glassfish\domains\domain1\lib

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

能否归途做我良人 2025-02-05 05:18:56

当您将应用程序部署到玻璃鱼容器中时,然后在permistence.xml中“交易型”时,我猜应该是“ jta”,属性“ jakarta.persistence.jdbc.url”无效,因为您没有表示任何数据库 /架构名称之后任何数据库名称“:3306”。 Glassfish文档提供了说明和示例如何设置全局JDBC连接,而仅限于应用程序范围的连接。

As you deploy your app to glassfish container then "transaction-type" in persistence.xml i guess should be "JTA", and property "jakarta.persistence.jdbc.url" is invalid because you do not indicate any database / schema name after ":3306". Glassfish documentation provides instructions and examples how to setup global jdbc connections and those limited to only application scope.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文