Spring-data-Jpa 中的 java.lang.IllegalArgumentException [英] java.lang.IllegalArgumentException in Spring-data-Jpa

查看:88
本文介绍了Spring-data-Jpa 中的 java.lang.IllegalArgumentException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了异常

<code>
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'auditTrailRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: [Assertion failed] - this argument is required; it must not be null
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1429)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1)
    at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:280)
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:304)
    ... 24 more
Caused by: java.lang.IllegalArgumentException: [Assertion failed] - this argument is required; it must not be null
    at org.springframework.util.Assert.notNull(Assert.java:112)
    at org.springframework.util.Assert.notNull(Assert.java:123)
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.<init>(SimpleJpaRepository.java:74)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:94)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:69)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:146)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:120)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:39)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
    ... 35 more

</code>

我的存储库定义为

<code>
public interface AuditTrailRepository extends CrudRepository<AuditTrail, Long>, JpaSpecificationExecutor<AuditTrail> {


    public List<AuditTrail> findByKey(String key);

     @Query("select u from AuditTrail u where u.createdDate between :startDate and :endDate ")
     List<AuditTrail> findByDateRange(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

     @Query("select u from AuditTrail u where u.createdDate between :startDate and :endDate and key = :clientId ")
     List<AuditTrail> findByDateRangeForClient(@Param("startDate") Date startDate, 
             @Param("endDate") Date endDate,
             @Param("ClientId") String clientId);


}
</code>

我的实体是

<code>
@Entity
@Table(name = "AUDIT_TRAIL")
public class AuditTrail extends BaseEntity {

    /**
     * 
     */
    private static final long serialVersionUID = -1647646453787027659L;
    private Long id;
    // ClientID from  
    private String key;
    private TaskType taskType;
    // Inbound / Outbound
    private FileActionType action;
    private String userName;
    private String message;
    private Date startTime;
    private Date endTime;

</code>

WEB-INF/classes/META-INF中的persistance.xml是

The persistance.xml in WEB-INF/classes/META-INF is

<code>
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
             version="2.0">
   <persistence-unit name="spring-jpa" />

</persistence>
</code>

任何帮助将不胜感激.

在这里回答我自己的问题......

唯一对我有用的方法是在 persistence.xml 中列出每个域实体

The only thing that worked for me listing each domain entity in persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
             version="2.0">
   <persistence-unit name="spring-jpa" >
        <class>com.multiplan.edi.common.domain.AuditTrail</class>

   </persistence-unit>

</persistence>

推荐答案

您看到发布的异常的原因是我们吞下了 EntityManager 试图查找 EntityType 来自 Metamodel.我创建了一个 JIRA 问题来跟踪这个问题.

The reason you see the exception posted is that we swallow an exception thrown by the EntityManager trying to lookup an EntityType from the Metamodel. I've created a JIRA issue to keep track of that.

一般来说,明确列出类的需要取决于您的 JPA 持久性提供程序的设置.其中一些可以配置为扫描实体包.其他要求至少列出根类.

Generally speaking, the need to list classes explicitly depends on the setup of your JPA persistence provider. Some of them can be configured to scan a package for entities. Others require to list at least root classes.

这篇关于Spring-data-Jpa 中的 java.lang.IllegalArgumentException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆