Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Crudepository实现接口?_Java_Spring_Spring Data - Fatal编程技术网

Java Spring Crudepository实现接口?

Java Spring Crudepository实现接口?,java,spring,spring-data,Java,Spring,Spring Data,我目前正在学习Spring Crudepository。我为其他类创建了一个基础存储库,以便以后继承,下面是我的代码: @NoRepositoryBean public interface BaseRepository<T, ID extends Serializable> extends CrudRepository<T, ID> { } 但是我得到了NullPointerException Warning: java.lang.NullPointerExcept

我目前正在学习Spring Crudepository。我为其他类创建了一个基础存储库,以便以后继承,下面是我的代码:

@NoRepositoryBean
public interface BaseRepository<T, ID extends Serializable> extends CrudRepository<T, ID>
{
}
但是我得到了
NullPointerException

Warning:   java.lang.NullPointerException
javax.el.ELException: java.lang.NullPointerException
    at com.sun.el.parser.AstValue.invoke(AstValue.java:293)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
    at javax.faces.component.UICommand.broadcast(UICommand.java:300)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
    at com.peter.uass.bean.LoginBean.saveAcc(LoginBean.java:55)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
    ... 41 more

Severe:   java.lang.NullPointerException
    at com.peter.uass.bean.LoginBean.saveAcc(LoginBean.java:55)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
    at javax.faces.component.UICommand.broadcast(UICommand.java:300)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)
更新

好的,我发现了问题,
NullPointerException
是因为我的autowired accountRepository为null,知道吗?

基本存储库接口必须扩展存储库接口扩展的相同接口。换句话说,如果您的存储库接口扩展了CRUDepository接口,那么BaseRepository接口也必须扩展它

public class BaseRepositoryImpl <T, ID extends Serializable>
        extends SimpleJpaRepository<T, ID>  implements BaseRepository<T, ID> {



  private final EntityManager entityManager;

    public BaseRepositoryImpl(Class<T> domainClass, EntityManager entityManager) {
        super(domainClass, entityManager);
        this.entityManager = entityManager;
    }

    @Transactional
    @Override
    public Optional<T> deleteById(ID id) {
        T deleted = entityManager.find(this.getDomainClass(), id);
        Optional<T> returned = Optional.empty();

        if (deleted != null) {
            entityManager.remove(deleted);
            returned = Optional.of(deleted);
        }
        return returned;
    }
}
公共类BaseRepositoryImpl
扩展SimpleParepository实现BaseRepository{
私人最终实体管理人实体管理人;
public BaseRepositoryImpl(类domainClass,EntityManager EntityManager){
超级(域类、实体管理器);
this.entityManager=entityManager;
}
@交易的
@凌驾
公共可选deleteById(ID){
T deleted=entityManager.find(this.getDomainClass(),id);
Optional返回=Optional.empty();
如果(已删除!=null){
entityManager.remove(已删除);
返回=可选。of(已删除);
}
返回;
}
}
有关更多信息,请参阅以下链接:


顺便说一句,您不需要使用
BaseRepository
,因为您尚未在此存储库中定义任何新方法。因此,您可以为直接扩展
crudepository
的每个实体创建一个接口。 注:

无法工作,因为您已经将
BaseRepository
标记为
@NoRepositoryBean

因此,只需为您的实体创建一个接口,如为实体
AccountDetail
,您可以执行以下操作:

@Repository
public interface AccountDetailRepository extends CrudRepository<AccountDetail, String>
{
  //Can add any custom method you want, but not necessary.
}

要使用SpringDataJPA存储库,您不需要实现它们。您可以扩展它们:

public interface MyEntityRepo extends JpaRepository<MyEntity, Integer> {
}
创建repo接口时,可以使用扩展存储库提供的所有基本方法:
save
delete
findAll
和其他方法(请参阅javadocs:,…)

要使用repo方法,只需将repo注入repo变量,例如:

@Transactional
@Service
public class MyEntityService {

    @Autoware
    private MyEntityRepo repo;

    @Transactional(readOnly = true)
    public List<MyEntity> findAll() {

        return repo.findAll();
    }  

    public void save(MyEntity entity) {

        repo.save(entity);
    }

    public void delete(MyEntity entity) {

        repo.delete(entity);
    }
}
@Transactional
@服务
公共类MyEntityService{
@自动软件
私人MyEntityRepo回购;
@事务(只读=真)
公共列表findAll(){
返回回购findAll();
}  
公共作废保存(MyEntity实体){
回购保存(实体);
}
公共作废删除(MyEntity实体){
回购。删除(实体);
}
}
更多信息:


因为您明确地将
BaseRepository
标记为
@NoRepositoryBean
,所以Spring数据当然不会为它创建bean。你到底想干什么?您应该为您的帐户创建一个接口(即,
接口AccountRepository扩展了BaseRepository
并将其注入。是的,因为您明确地将BaseRepository标记为@NoRepositoryBean,所以您应该实现它,我建议创建一个repository类,该类使用您想要实现的额外方法来实现它。我创建了AccountRepository接口,但我仍然得到
NullPointerException
,我的类:
@Repository公共接口AccountRepository扩展BaseRepository{}
为什么您要创建一个中间接口而不是直接扩展
crudepository
?您想用
BaseRepository
实现什么?否则很难帮助您解决问题您的
SimpleParepository
类是什么?我仍然得到错误
javax.el.ELException:java.lang.NullPointerException
@Newbie您为自动连接AccountDetailRepository对象的类创建了bean吗?已经更新了完整的错误堆栈。那是什么bean?我正在调用
saveAcc()
函数在我的
loginBean
中,有关于如何正确操作的指南吗?很抱歉,我是JSF、Hibernate和spring的新手。我有一个疑问,spring正确地实例化了类??那么我们如何使用autowired作为接口的参考??。
@Autowired
private AccountDetailRepository accountRepository;
public void saveAcc()
{
    System.out.println("Save Acc");
    accountRepository.save(new AccountDetail("username", "password", 1));
}
public interface MyEntityRepo extends JpaRepository<MyEntity, Integer> {
}
@Entity
public class MyEntity {

    @Id
    @GeneratedValue
    private Integer id;

    // fields, getters, setters and other stuff
}
@Transactional
@Service
public class MyEntityService {

    @Autoware
    private MyEntityRepo repo;

    @Transactional(readOnly = true)
    public List<MyEntity> findAll() {

        return repo.findAll();
    }  

    public void save(MyEntity entity) {

        repo.save(entity);
    }

    public void delete(MyEntity entity) {

        repo.delete(entity);
    }
}