当前位置: 首页 > 知识库问答 >
问题:

在持久性中Hibernate自动检测。xml无法工作

包谭三
2023-03-14

我读过《我需要吗》

Persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" 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">
<persistence-unit name="Test_Project" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.gmail.physicistsarah.gradletestproject.core.Person</class>
    <!--Exclude unlisted class detection-->
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <!-- Scan for annotated classes and Hibernate mapping XML files -->
        <property name="hibernate.archive.autodetection" value="class, hbm"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test_project_db?zeroDateTimeBehavior=convertToNull"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.password" value=""/>
        <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
        <property name="javax.persistence.schema-generation.database.action" value="none"/>
        <!--<property name="hibernate.show_sql" value="true"/>-->
        <property name="hibernate.hbm2ddl.auto" value="create"/>
    </properties>
</persistence-unit>

人:

package com.gmail.physicistsarah.gradletestproject.core;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 *
 * @author Sarah Szabo
 */
@Entity
@Table(name = "Person")
public class Person {

@Id
@GeneratedValue
@Column(name = "Person_ID")
private final int id = 0;
@Column(name = "First_Name", nullable = false)
private final String firstName;
@Column(name = "Last_Name", nullable = false)
private final String lastName;

public Person(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}
}

Init(主类):

package com.gmail.physicistsarah.gradletestproject.core;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class Init {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("Test_Project");
    EntityManager manager = factory.createEntityManager();
    Session session = manager.unwrap(Session.class);
    Transaction transaction = session.getTransaction();
    transaction.begin();
    session.saveOrUpdate(new Person("Carl", "Gauss"));
    session.saveOrUpdate(new Person("Benoit", "Mandelbrot"));
    transaction.commit();
    factory.close();
}
}

共有1个答案

慕容星晖
2023-03-14

您应该尝试使用Hibernate持久性提供程序并删除

同时删除

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" 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 ">
<persistence-unit name="Test_Project" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <shared-cache-mode>ALL</shared-cache-mode>
    <validation-mode>AUTO</validation-mode>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test_project_db?zeroDateTimeBehavior=convertToNull" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    </properties>
</persistence-unit>
</persistence>

我注意到您正在将JPA代码与Hibernate代码相互混合。如果你正在使用JPA,那么试着坚持使用JPA。

创建EntityManager后使用以下代码:

EntityTransaction tran = manager.getTransaction();
tran.begin();

try {
    Person savedPerson1 = manager.merge(new Person("Carl", "Gauss"));
    Person savedPerson2 = manager.merge(new Person("Benoit", "Mandelbrot"));
    tran.commit();
} catch (Exception e) {
    tran.rollback();
}

manager.close();
factory.close();

请记住从实体管理器.merge() 调用访问返回的实体,以访问任何自动生成的字段。

您应该使用以下Maven POM依赖项,以便在Java SE环境中按预期工作:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.3.8.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.0.Final</version>
</dependency>

 类似资料:
  • 可以从持久性创建hibernate会话工厂对象。xml。通常,我们使用持久性创建EntityManagerFactory。xml,我想知道是否可以创建SessionFactory<我在谷歌上搜索了一下,但没有找到任何有用的资源。

  • 我一直在尝试使用JPA Hibernate和mysql整理与我的DB的连接,但出于某种原因,无论我尝试什么,在启动tomcat服务器时,我都会遇到相同的异常: 这是我的JPA配置类: } 在这一点上,我想不出还有什么可以尝试的。。任何帮助都是非常感激的 编辑:这是整个堆栈跟踪

  • 问题内容: 我正在尝试创建事务管理器,并将其与Hibernate for Oracle一起使用。 我的persistence.xml文件是: 在spring的applicationContext.xml中,我添加了: 但是,当我运行时: 我有一个例外: Hibernate基础文件文件除外。 可能是什么问题呢? Hibernate持久性如何知道引用Spring bean? 问题答案: 持久性提供程序

  • 我熟悉此处定义的Akka测试方法: http://doc.akka.io/docs/akka/snapshot/scala/testing.html 我了解如何使用TestKit、TestActorRef、TestProbe等。我还了解我的核心域逻辑应该与Akka隔离提取和测试。 我的问题是关于在Akka Persistence参与者(即PersistentActor和PersistentView

  • 问题内容: 我有一个带有以下文件的几个实体的JavaEE项目: 而且似乎可行。然后将该项目作为JAR部署到两个不同的项目。其中一个文件与上面的文件基本相同,即使用Hibernate 的功能。但是,它似乎不起作用(因为我认为它需要在jar中加载对实体的搜索)。当我尝试手动列出两个xml文件中的所有实体时,一切正常。 编辑: 它与 jar文件 一起使用,但仅与jar的绝对路径一起使用。对于团队项目而言

  • 我试图在一个Spring Boot Maven项目中用的持久性特性实现Drools。遵循此文档进行实现。我能够在普通的Java应用程序中做到这一点,但我在Spring Boot应用程序中尝试做到这一点时遇到了异常。 下面是实现。 项目结构 事实类 persistence.xml pom.xml文件中包含的依赖关系如下: