Spring-data-Jpa 中的 java.lang.IllegalArgumentException [英] java.lang.IllegalArgumentException in Spring-data-Jpa
问题描述
我遇到了异常
<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屋!