I am getting an exception
<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>
My repository is defined as
<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>
My entity is
<code>
@Entity
@Table(name = "AUDIT_TRAIL")
public class AuditTrail extends BaseEntity {
/**
*
*/
开发者_JAVA百科 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>
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>
Any help will be appreciated.
Answering my own question here .......
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>
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.
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.
精彩评论