GVKun编程网logo

Maven + Spring + Hibernate:hibernate3-maven-pluginhbm2ddl失败,原因为“原因:java.lang.NullPointerException”

8

想了解Maven+Spring+Hibernate:hibernate3-maven-pluginhbm2ddl失败,原因为“原因:java.lang.NullPointerException”的新动

想了解Maven + Spring + Hibernate:hibernate3-maven-pluginhbm2ddl失败,原因为“原因:java.lang.NullPointerException”的新动态吗?本文将为您提供详细的信息,此外,我们还将为您介绍关于createEntityManager在org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus处引发java.lang.NullPointerException、Hibernate / JPA-访问SingularAttribute参数时出现NullPointerException、Hibernate Envers OneToMany Cascade.ALL org.hibernate.HibernateException:找到多个具有给定标识符的行、Hibernate Search + Spring Boot:java.lang.IllegalStateException:没有可用的事务性EntityManager的新知识。

本文目录一览:

Maven + Spring + Hibernate:hibernate3-maven-pluginhbm2ddl失败,原因为“原因:java.lang.NullPointerException”

Maven + Spring + Hibernate:hibernate3-maven-pluginhbm2ddl失败,原因为“原因:java.lang.NullPointerException”

由于当前在Spring中对Hibernate
4的支持不足,我不得不将Hibernate从版本4降级到版本3(具体来说是3.3.2GA),现在该项目在尝试使用hbm2ddl生成架构时无法构建。这个错误太模糊了,谷歌并没有带来太多收益。

这是我的pom.xml:

<?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.example</groupId>    <artifactId>example</artifactId>    <version>1.0-SNAPSHOT</version>    <name>Spring + Hibernate Example</name>    <packaging>jar</packaging>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <spring.version>3.1.2.RELEASE</spring.version>        <hibernate.version>3.3.2.GA</hibernate.version>        <java.version>1.6</java.version>    </properties>    <build>        <extensions>            <extension>                <groupId>org.hsqldb</groupId>                <artifactId>hsqldb</artifactId>                <version>2.0.0</version>            </extension>            <extension>                <groupId>log4j</groupId>                <artifactId>log4j</artifactId>                <version>1.2.17</version>            </extension>        </extensions>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>2.0.2</version>                <configuration>                    <source>${java.version}</source>                    <target>${java.version}</target>                </configuration>            </plugin>            <plugin>                <!-- Run "mvn hibernate3:hbm2ddl" to generate schema -->                <groupId>org.codehaus.mojo</groupId>                <artifactId>hibernate3-maven-plugin</artifactId>                <version>3.0</version>                <executions>                    <execution>                        <id>generate-ddl</id>                        <phase>process-classes</phase>                        <goals>                            <goal>hbm2ddl</goal>                        </goals>                    </execution>                </executions>                <configuration>                    <hibernatetool destdir="${project.build.directory}/generated">                        <annotationConfiguration configurationfile="hibernate.cfg.xml"/>                        <hbm2ddl export="false" create="true" update="true"                                 format="format" outputfilename="schemaDiff.ddl"/>                    </hibernatetool>                </configuration>            </plugin>        </plugins>    </build>    <dependencies>        <!-- Inversion of Control: Spring Dependencies -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>${spring.version}</version>            <exclusions>                <!-- Exclude the problematic commons-logging -->                <exclusion>                    <groupId>commons-logging</groupId>                    <artifactId>commons-logging</artifactId>                </exclusion>            </exclusions>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-core</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-orm</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>commons-dbcp</groupId>            <artifactId>commons-dbcp</artifactId>            <version>1.4</version>        </dependency>        <!-- Object Relational Mapping: Hibernate -->        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-core</artifactId>            <version>${hibernate.version}</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-entitymanager</artifactId>            <version>${hibernate.version}</version>        </dependency>        <dependency>            <groupId>javax.transaction</groupId>            <artifactId>jta</artifactId>            <version>1.1</version>        </dependency>        <dependency>            <groupId>org.hibernate.javax.persistence</groupId>            <artifactId>hibernate-jpa-2.0-api</artifactId>            <version>1.0.1.Final</version>        </dependency>        <!-- Hibernate Annotations Dependencies -->        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-annotations</artifactId>            <version>3.5.6-Final</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-commons-annotations</artifactId>            <version>3.3.0.ga</version>        </dependency>        <!-- Database: HSQLDB -->        <dependency>            <groupId>org.hsqldb</groupId>            <artifactId>hsqldb</artifactId>            <version>2.0.0</version>        </dependency>        <!-- Connection Pool: C3P0 -->        <dependency>            <groupId>c3p0</groupId>            <artifactId>c3p0</artifactId>            <version>0.9.1.2</version>        </dependency>        <!-- Second-level caching: Ehcache -->        <dependency>            <groupId>ehcache</groupId>            <artifactId>ehcache</artifactId>            <version>1.2.3</version>        </dependency>        <!-- Logging: SLF4j & Log4J -->        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>jcl-over-slf4j</artifactId>            <version>1.6.6</version>            <scope>runtime</scope>        </dependency>        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-api</artifactId>            <version>1.6.6</version>            <scope>runtime</scope>        </dependency>        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-log4j12</artifactId>            <version>1.6.6</version>            <scope>runtime</scope>        </dependency>        <dependency>            <groupId>log4j</groupId>            <artifactId>log4j</artifactId>            <version>1.2.17</version>            <scope>runtime</scope>        </dependency>        <!-- Testing: JUnit -->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.10</version>        </dependency>        <!-- Testing: Spring -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-test</artifactId>            <version>${spring.version}</version>        </dependency>    </dependencies></project>

跑步

mvn hibernate3:hbm2ddl

失败于

[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:3.0:hbm2ddl(default-cli) on project example: There was an error creating the AntRun task.NullPointerException -> [Help 1]

完整的堆栈跟踪为:

[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:3.0:hbm2ddl (default-cli) on project example: There was an error creating the AntRun task. NullPointerException -> [Help 1]org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:3.0:hbm2ddl (default-cli) on project example: There was an error creating the AntRun task.    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)    at java.lang.reflect.Method.invoke(Method.java:597)    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)Caused by: org.apache.maven.plugin.MojoExecutionException: There was an error creating the AntRun task.    at org.codehaus.mojo.hibernate3.AbstractHibernateMojo.execute(AbstractHibernateMojo.java:84)    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)    ... 19 moreCaused by: java.lang.NullPointerException    at org.codehaus.plexus.configuration.DefaultPlexusConfiguration.add(DefaultPlexusConfiguration.java:174)    at org.codehaus.plexus.configuration.DefaultPlexusConfiguration.addChild(DefaultPlexusConfiguration.java:150)    at org.codehaus.mojo.hibernate3.util.PlexusConfigurationUtils.setHibernateConfiguration(PlexusConfigurationUtils.java:289)    at org.codehaus.mojo.hibernate3.util.PlexusConfigurationUtils.parseHibernateTool(PlexusConfigurationUtils.java:67)    at org.codehaus.mojo.hibernate3.AbstractHibernateToolMojo.getConfiguration(AbstractHibernateToolMojo.java:60)    at org.codehaus.mojo.hibernate3.AbstractHibernateMojo.execute(AbstractHibernateMojo.java:76)    ... 21 more

希望有人可以对此有所启发!

答案1

小编典典

在尝试使havennate模型使maven引导数据库时,我遇到了相同的问题[(在maven test的Generate databaseschema(Hibernate)中描述的问题)。

我使hbm2ddl在以下版本的组合中工作得很好:Hibernate(运行时):4.1.7.Final hibernate3-maven-
plugin:3.6.10.Final,指定的插件版本2.2 hibernate3-maven-plugin的hibernate-
validator依赖关系:4.2 .0。最终

在pom的相关部分下方:

版本:

<properties>    <org.hibernate.version>4.1.7.Final</org.hibernate.version>    <hibernate.maven.plugin.version>3.6.10.Final</hibernate.maven.plugin.version></properties>

hibernate3-maven-plugin的定义:

<build>    <plugins>        <plugin>            <groupId>org.codehaus.mojo</groupId>            <artifactId>hibernate3-maven-plugin</artifactId>            <version>2.2</version>            <configuration>                <components>                    <component>                        <name>hbm2ddl</name>                        <implementation>jpaconfiguration</implementation>                    </component>                </components>                <componentProperties>                    <outputfilename>schema.ddl</outputfilename>                    <create>true</create>                    <export>false</export>                    <format>true</format>                    <drop>false</drop>                    <jdk5>true</jdk5>                    <propertyfile>target/test-classes/application.properties</propertyfile>                    <skip>${skipTests}</skip>                </componentProperties>            </configuration>            <executions>                <execution>                    <phase>process-classes</phase>                    <goals>                        <goal>hbm2ddl</goal>                    </goals>                </execution>            </executions>            <dependencies>                <dependency>                    <groupId>org.hibernate</groupId>                    <artifactId>hibernate-entitymanager</artifactId>                    <version>${hibernate.maven.plugin.version}</version>                    <exclusions>                        <exclusion>                            <groupId>cglib</groupId>                            <artifactId>cglib</artifactId>                        </exclusion>                        <exclusion>                            <groupId>commons-logging</groupId>                            <artifactId>commons-logging</artifactId>                        </exclusion>                    </exclusions>                </dependency>                <dependency>                    <groupId>org.hibernate</groupId>                    <artifactId>hibernate-core</artifactId>                    <version>${hibernate.maven.plugin.version}</version>                    <exclusions>                        <exclusion>                            <groupId>cglib</groupId>                            <artifactId>cglib</artifactId>                        </exclusion>                        <exclusion>                            <groupId>commons-logging</groupId>                            <artifactId>commons-logging</artifactId>                        </exclusion>                    </exclusions>                </dependency>                <dependency>                    <groupId>org.hibernate</groupId>                    <artifactId>hibernate-validator</artifactId>                    <version>4.2.0.Final</version>                </dependency>            </dependencies>        </plugin>    </plugins></build>

运行时依赖项:

<dependencies>    <dependency>        <groupId>org.hibernate</groupId>        <artifactId>hibernate-core</artifactId>        <version>${org.hibernate.version}</version>    </dependency>    <dependency>        <groupId>org.hibernate</groupId>        <artifactId>hibernate-entitymanager</artifactId>        <version>${org.hibernate.version}</version>    </dependency></dependencies>

我希望这有帮助。

createEntityManager在org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus处引发java.lang.NullPointerException

createEntityManager在org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus处引发java.lang.NullPointerException

部署hibernate应用程序时出现堆栈跟踪

java.lang.NullPointerException
    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:72) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:114) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1197) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:170) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:90) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:112) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:107) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1]
    at com.mycompany.myapp.common.persistence.HibernateUtil.<clinit>(HibernateUtil.java:53) [classes:]
    at com.mycompany.myapp.common.businessobjects.ServerSettings.GetServerSettings(ServerSettings.java:247) [classes:]
    at com.mycompany.myapp.common.servlet.SecurityFilter.init(SecurityFilter.java:55) [classes:]
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:447) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3245) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3836) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
    at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
    at java.lang.Thread.run(Thread.java:680) [:1.6.0_26]

它在我的HibernateUtil类中命中了NPE,第53行是创建EntityManager的行-
看起来createEntityManager()返回的是null。代码看起来像

private static EntityManagerFactory entityManagerFactory = null;
private static EntityManager entityManager = null;

static {
    try {

        entityManagerFactory = Persistence.createEntityManagerFactory("primary");
        entityManager = entityManagerFactory.createEntityManager();

我的persistence.xml看起来像

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="primary"> <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source>

  <properties>
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
     <property name="hibernate.ejb.interceptor.session_scoped" value="com.mycompany.myapp.common.persistence.BusinessObjectInterceptor"/>
           </properties>

有什么想法为什么createEntityManager()给NPE?

Hibernate / JPA-访问SingularAttribute参数时出现NullPointerException

Hibernate / JPA-访问SingularAttribute参数时出现NullPointerException

我正在尝试对Hibernate 5.0.7.Final使用JPA2类型安全的条件查询。

...
criteria.where( builder.equal( root.get(SingularAttribute.attr),value ));
//where parameters are
//criteria.where( builder.equal( root.get(Person_.name),"Can" ));
...

root.get总是抛出异常NullPointerException。元模型类Person_用于Person通过产生org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor

未填充的JPA /
Hibernate静态元模型属性中
提出了类似的问题-NullPointerException,但这一次这两个类位于同一包中。

堆栈跟踪:

java.lang.NullPointerException
at org.hibernate.jpa.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:123)

我的代码:

我用来确保它们将具有的接口getId();

package it.unibz.db.hibernate.model;

public interface ModelInterface<PK extends Serializable> extends Serializable {
    PK getId();
}

模型类

package it.unibz.db.hibernate.model;

@Entity
@Table(name ="person")
public class Person implements ModelInterface<Integer> {
    @Id
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }
    //other getter and setters
}

生成的元模型Person_类

package it.unibz.db.hibernate.model;

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Person.class)
public abstract class Person_ {

    public static volatile SingularAttribute<Person,String> name;
    public static volatile SingularAttribute<Person,Integer> id;

}

我随PersonDao继承的通用DAO类

public class GenericDao<E extends ModelInterface<PK>,PK extends Serializable> implements DaoInterface<E,PK> {
private Class<E> type;

public GenericDao(Class<E> type) {
    this.type = type;
    //called as super(ClassName.class); eg. super(Person.class);
}

public List<E> readBy(SingularAttribute column,String value) throws Exception {
    EntityManager em = HibernateUtil.getEntityManager();
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<E> criteria = builder.createQuery(type);
    Root<E> root = criteria.from(type);

    criteria.select(root);
    criteria.where( builder.equal( root.get(column),value ));
    List<E> entityList = em.createQuery(criteria).getResultList();
    em.close();
    return entityList;
    }
}

我的一些依赖

  • hibernate-c3p0 5.0.7。最终版

  • 休眠实体管理器5.0.7。最终版

  • PostgreSQL 9.4.1207.jre7

  • hibernate-jpamodelgen 5.0.7。最终版

编辑:

在main方法中运行此代码有效

EntityManager em = HibernateUtil.getEntityManager();
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
Root<Person> root = criteria.from(Person.class);
criteria.select(root);
criteria.where( builder.equal( root.get(Person_.name),"Can" ));
List<Person> entityList = em.createQuery(criteria).getResultList();
//do stuff with entityList

但是方法中包含的相同代码将引发NullPointerException

public List<Person> readBy(SingularAttribute column,String value) throws Exception {
    log.debug("Reading entity by");

    EntityManager em = HibernateUtil.getEntityManager();
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
    Root<Person> root = criteria.from(Person.class);

    criteria.select(root);
    criteria.where( builder.equal( root.get(column),value ));
    List<Person> entityList = em.createQuery(criteria).getResultList();
    em.close();
    return entityList;
}

因此看来问题出在将SingularAttribute参数传递给方法readBy(SingularAttribute column,String value)

我在main中测试了此代码,并打印了 false

EntityManager em = HibernateUtil.getEntityManager();
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
Root<Person> root = criteria.from(Person.class);
System.out.println(root.get(Person_.name) == null); //false

同时,此引发InvocationTargetException是由NullPointerExceptionat
引起的root.get(column)

//invoked as personDao.test(Person_.name) from main
public void test(SingularAttribute column) {
    EntityManager em = HibernateUtil.getEntityManager();
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
    Root<Person> root = criteria.from(Person.class);
    System.out.println(root.get(column) == null); //InvocationTargetException
}

这是应该做的吗?如何将SingularAttribute对象作为参数传递给方法?

Hibernate Envers OneToMany Cascade.ALL org.hibernate.HibernateException:找到多个具有给定标识符的行

Hibernate Envers OneToMany Cascade.ALL org.hibernate.HibernateException:找到多个具有给定标识符的行

好的,问题是当你尝试

Car car = new Car();
car.setBrand("Alfa Romeo");
Set<Car> cars = new HashSet<>();
cars.add(car);

Driver driver = new Driver();
driver.setCars(cars);

em.persist(driver);

单向一对多,hibernate执行3条sql语句:

  1. 插入驱动程序 (id) 值 (?)
  2. 插入汽车(品牌,id)值(?,?)
  3. 更新汽车设置 driver_id=?其中 id=?

切换到双向关系

@Entity
@Audited
public class Car {

    @Id
    @GeneratedValue
    private Long id;

    private String brand;

    @ManyToOne
    private Driver driver;

    // Constructor,getters and setters omitted
}

@Entity
@Audited
public class Driver {

    @Id
    @GeneratedValue
    private Long id;

    @OneToMany(cascade = CascadeType.ALL,mappedBy = "driver")
    @AuditJoinTable(name = "car_aud")
    private Set<Car> cars = new HashSet();

    public void setCars(Set<Car> cars) {
        books.forEach(b -> b.setDriver(this));
        this.cars.addAll(cars);
    }

    // Constructor,getters and setters omitted

}

使 Hibernate 只创建 2 个 SQL 语句:

  1. 插入驱动程序 (id) 值 (?)
  2. 插入汽车 (driver_id,brand,id) 值 (?,?,?)

结果相同。所以CAR_AUD表中不会有歧义。

Hibernate Search + Spring Boot:java.lang.IllegalStateException:没有可用的事务性EntityManager

我正在尝试按照本教程在Spring Boot应用程序中设置Hibernate Search 。问题是我在启动时遇到错误:

Caused by: java.lang.IllegalStateException: No transactional EntityManager available
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:279) ~[spring-orm-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at com.sun.proxy.$Proxy110.unwrap(Unknown Source) ~[na:na]
    at org.hibernate.search.jpa.Search.getSession(Search.java:55) ~[hibernate-search-orm-5.9.0.Final.jar:5.9.0.Final]
    at org.hibernate.search.jpa.Search.getFullTextEntityManager(Search.java:49) ~[hibernate-search-orm-5.9.0.Final.jar:5.9.0.Final]
    at mz.api.spring.service.HibernateSearchService.initializeHibernateSearch(HibernateSearchService.java:26) ~[classes/:na]
    at mz.api.spring.config.HibernateSearchConfig.hibernateSearchService(HibernateSearchConfig.java:25) ~[classes/:na]
    at mz.api.spring.config.HibernateSearchConfig$$EnhancerBySpringCGLIB$$6594e5b4.CGLIB$hibernateSearchService$0(<generated>) ~[classes/:na]
    at mz.api.spring.config.HibernateSearchConfig$$EnhancerBySpringCGLIB$$6594e5b4$$FastClassBySpringCGLIB$$ab525f18.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:361) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at mz.api.spring.config.HibernateSearchConfig$$EnhancerBySpringCGLIB$$6594e5b4.hibernateSearchService(<generated>) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    ... 24 common frames omitted

我不明白是什么原因导致了这个问题。


相关代码:

@SpringBootApplication
@EnableJpaRepositories(basePackages = "mz.api.spring.repository")
@EntityScan(basePackages = "mz.api.hibernate.model")
@EnableTransactionManagement
public class Application {

    private final static Logger LOGGER = LogManager.getLogger(Application.class);

    public static void main(String[] args) {
        LOGGER.debug("Running application ..");
        SpringApplication.run(Application.class,args);
    }

}

..

@Service 
public class HibernateSearchService {

    private final EntityManager entityManager;

    @Autowired
    public HibernateSearchService(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    public void initializeHibernateSearch() {

        try {
            FullTextEntityManager fullTextEntityManager = getFullTextEntityManager(this.entityManager);
            fullTextEntityManager.createIndexer().startAndWait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }    
    }

}

..

@Configuration
public class HibernateSearchConfig {

    private final EntityManager entityManager;

    @Autowired
    public HibernateSearchConfig(EntityManager entityManager) {
        this.entityManager = entityManager;
    }


    @Bean
    HibernateSearchService hibernateSearchService() {
        HibernateSearchService hibernateSearchService = new HibernateSearchService(this.entityManager);
        hibernateSearchService.initializeHibernateSearch();
        return hibernateSearchService;
    }

}

今天的关于Maven + Spring + Hibernate:hibernate3-maven-pluginhbm2ddl失败,原因为“原因:java.lang.NullPointerException”的分享已经结束,谢谢您的关注,如果想了解更多关于createEntityManager在org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus处引发java.lang.NullPointerException、Hibernate / JPA-访问SingularAttribute参数时出现NullPointerException、Hibernate Envers OneToMany Cascade.ALL org.hibernate.HibernateException:找到多个具有给定标识符的行、Hibernate Search + Spring Boot:java.lang.IllegalStateException:没有可用的事务性EntityManager的相关知识,请在本站进行查询。

本文标签: