【问题标题】:Spring data repository mapped one to one findByObject not workingSpring数据存储库一对一映射findByObject不起作用
【发布时间】:2016-03-29 12:04:17
【问题描述】:

我有一个实体 A,它与实体 B 具有一对一的映射关系。我想使用 findByObject 在实体 A 中找到一行。

这是我与 BankUser 一对一关系的实体:

@Entity
@Table(name = "str_filter_rule")
public class STRFilterRule extends STRRule {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", unique = true)
private Long id;

@OneToOne
private BankUser bankUser;

@OneToOne(cascade = CascadeType.ALL)
private TransactionDeviation transactionDeviation;

@OneToOne(cascade = CascadeType.ALL)
private TransactionActivity transactionActivity;

@OneToOne(cascade = CascadeType.ALL)
private AccountActivity accountActivity;

public STRFilterRule() {
    super();
}

public STRFilterRule(BankUser bankUser, TransactionDeviation transactionDeviation, TransactionActivity transactionActivity,
        AccountActivity accountActivity) {
    super();
    this.bankUser = bankUser;
    this.transactionDeviation = transactionDeviation;
    this.transactionActivity = transactionActivity;
    this.accountActivity = accountActivity;
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public BankUser getBankUser() {
    return bankUser;
}

public void setBankUser(BankUser bankUser) {
    this.bankUser = bankUser;
}

public TransactionDeviation getTransactionDeviation() {
    return transactionDeviation;
}

public void setTransactionDeviation(TransactionDeviation transactionDeviation) {
    this.transactionDeviation = transactionDeviation;
}

public TransactionActivity getTransactionActivity() {
    return transactionActivity;
}

public void setTransactionActivity(TransactionActivity transactionActivity) {
    this.transactionActivity = transactionActivity;
}

public AccountActivity getAccountActivity() {
    return accountActivity;
}

public void setAccountActivity(AccountActivity accountActivity) {
    this.accountActivity = accountActivity;
}

}

现在在我的存储库中有一种方法可以获取 STRFilterRules 列表

@Repository
public interface STRFilterRuleRepository extends    CrudRepository<STRFilterRule, Long> {

List<STRFilterRule> findByBankUser(BankUser bankuser);
}

现在在运行程序时,我的控制台出现以下错误:

org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener   instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'STRSettingController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strFilterRuleServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.lftechnology.warehouse.suspicioustransaction.repository.STRFilterRuleRepository com.lftechnology.warehouse.suspicioustransaction.service.impl.StrFilterRuleServiceImpl.strFilterRuleRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'STRFilterRuleRepository': Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:311)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:834)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4738)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strFilterRuleServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.lftechnology.warehouse.suspicioustransaction.repository.STRFilterRuleRepository com.lftechnology.warehouse.suspicioustransaction.service.impl.StrFilterRuleServiceImpl.strFilterRuleRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'STRFilterRuleRepository': Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:512)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:486)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:615)
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:308)
... 22 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.lftechnology.warehouse.suspicioustransaction.repository.STRFilterRuleRepository com.lftechnology.warehouse.suspicioustransaction.service.impl.StrFilterRuleServiceImpl.strFilterRuleRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'STRFilterRuleRepository': Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:571)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
... 35 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'STRFilterRuleRepository': Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1145)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1069)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:967)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:543)
... 37 more
Caused by: java.lang.NullPointerException
at org.springframework.data.jpa.repository.query.QueryUtils.isAlreadyFetched(QueryUtils.java:558)
at org.springframework.data.jpa.repository.query.QueryUtils.toExpressionRecursively(QueryUtils.java:473)
at org.springframework.data.jpa.repository.query.JpaQueryCreator$PredicateBuilder.build(JpaQueryCreator.java:199)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.toPredicate(JpaQueryCreator.java:146)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:86)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:44)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:109)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:88)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:73)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.<init>(PartTreeJpaQuery.java:110)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$CountQueryPreparer.<init>(PartTreeJpaQuery.java:230)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:64)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:95)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:206)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:73)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:408)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:206)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:251)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:237)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at     org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 47 more

【问题讨论】:

  • 它正在服务中自动装配。但是当我从存储库中删除上述方法时,没有错误。
  • 您配置 OneToOne 并返回一个列表。无论是 List 还是 OneToOne 都是错误的。

标签: java spring hibernate jpa spring-data


【解决方案1】:

你可以试试下面的代码,这将包含 BankUser 下的所有父对象

@Repository
public interface STRFilterRuleRepository extends    CrudRepository<STRFilterRule, Long> {

STRFilterRule findById(long id);
}

【讨论】:

  • 一对一关系永远不会在关系的任一侧将结果作为列表返回。为什么你期望结果会在 List 中?为什么会出现空指针异常?您能否将代码段发送到您在服务端或控制器端自动装配 repo 的位置
【解决方案2】:

因为你无视我的评论。 STRFilterRule 和 BankUser 之间存在 OneToOne 映射,因此不可能有返回类型 List。更改映射或返回类型。

更改返回类型的示例。

@Repository
public interface STRFilterRuleRepository extends    CrudRepository<STRFilterRule, Long> {

    STRFilterRule findByBankUser(BankUser bankuser);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2021-06-24
    • 2020-11-17
    相关资源
    最近更新 更多