关于jpa dao接口的自动实现

wangpengxiqian 2013-04-16 11:03:43
最近在搞struts,spring,jpa的整合,感觉jpa dao 接口的自动实现用起来很方便,但是有一点疑问的地方;
dao接口的定义说是要这样

public interface UserDao extends JpaRepository<Persion, Integer> {
}

那岂不是要给每个实体都定一个这样的接口?感觉这样就不是很方便了,于是突发奇想,是不是可以这样定:

public interface MyDao<T,ID extends Serializable> extends JpaRepository<T,ID> {

}

这样一来我只需要在注入MyDao的时候再指明实体类就好了,可是竟然在启动的时候报错,错误信息如下:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myDao': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object
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:1442)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:305)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:442)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:416)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:550)
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:155)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:92)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:303)
... 28 more
Caused by: java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object
at org.hibernate.ejb.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:200)
at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:61)
at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:65)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:146)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:84)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:67)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:136)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:153)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:43)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
... 38 more

不知道有没有好的解决方法?求赐教
...全文
2708 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hfzlmx 2014-07-08
  • 打赏
  • 举报
回复
http://blog.csdn.net/yyzhq/article/details/8006923
qiuqiupeng 2014-02-03
  • 打赏
  • 举报
回复
@NoRepositoryBean public interface BaseRepository<T, ID extends Serializable> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T> { }
阿狸_A_桃子 2014-01-24
  • 打赏
  • 举报
回复
你的实体类没有加注解。 @Entity @Table(name = "ti_bss2etos_inf_log") public class Bss2etosInfLog implements Serializable{ @Id @Column(name = "STREAMING_NO", unique = true, nullable = false, length = 36) public String getStreamingNo() { return streamingNo; } public void setStreamingNo(String streamingNo) { this.streamingNo = streamingNo; } @Column(name = "OP_FLAG", nullable = false, length = 32) public String getOpFlag() { return opFlag; } public void setOpFlag(String opFlag) { this.opFlag = opFlag; } }
shmilyxiaolong 2013-11-22
  • 打赏
  • 举报
回复
你好,我现在的用法和你一样,同时是出现这个问题,请问你解决了没有呢,能告诉我解决的方法吗?
放纵的青春 2013-11-22
  • 打赏
  • 举报
回复
你可以这样 定义一个baseDao接口 继承JpaRepository 然后以后创建的接口继承baseDao就行了
猫大叔 2013-07-25
  • 打赏
  • 举报
回复
因为Dao在容器启动时就会加载的。
湛卢VV 2013-07-25
  • 打赏
  • 举报
回复
既然有工厂 为什么不在工厂里调用dao的 继承实例呢?
zb402230366 2013-07-24
  • 打赏
  • 举报
回复
同求啊,这是什么问题
zb402230366 2013-07-24
  • 打赏
  • 举报
回复
同求啊,这是什么问题啊

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧